Skip to content
Bitcoin Roots

v29.4-roots.3 · Commit 3: [PATCH 03/30] policy: restore conservative relay and network controls

test/functional/p2p_disconnect_ban.py

Before: test/functional/p2p_disconnect_ban.py · After: test/functional/p2p_disconnect_ban.py

File metadata
index 94be86475ead80a52b97eb3aab31168262266fce..b61b3ad9175eab1af20b202956151966a541c3ad 100755

Download original patch · Release notes

Diff rows 1–49 of 49. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.

test/functional/p2p_disconnect_ban.py CHANGED
@@ -10,6 +10,7 @@ from test_framework.test_framework import BitcoinTestFramework
10
10
  from test_framework.util import (
11
11
  assert_equal,
12
12
  assert_raises_rpc_error,
13
+ p2p_port,
13
14
  )
14
15
 
15
16
  class DisconnectBanTest(BitcoinTestFramework):
@@ -129,8 +130,12 @@ class DisconnectBanTest(BitcoinTestFramework):
129
130
  self.log.info("disconnectnode: fail to disconnect when calling with junk address")
130
131
  assert_raises_rpc_error(-29, "Node not found in connected nodes", self.nodes[0].disconnectnode, address="221B Baker Street")
131
132
 
132
- self.log.info("disconnectnode: successfully disconnect node by address")
133
- address1 = self.nodes[0].getpeerinfo()[0]['addr']
133
+ self.log.info("disconnectnode: fail to disconnect when calling with invalid subnet")
134
+ assert_raises_rpc_error(-8, "Invalid subnet", self.nodes[0].disconnectnode, address="1.2.3.0/24\0")
135
+
136
+ self.log.info("disconnectnode: successfully disconnect node by address and port")
137
+ address1 = "127.0.0.1:" + str(p2p_port(1))
138
+ assert [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1]
134
139
  self.nodes[0].disconnectnode(address=address1)
135
140
  self.wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 1, timeout=10)
136
141
  assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1]
@@ -140,11 +145,27 @@ class DisconnectBanTest(BitcoinTestFramework):
140
145
  assert_equal(len(self.nodes[0].getpeerinfo()), 2)
141
146
  assert [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1]
142
147
 
148
+ self.log.info("disconnectnode: successfully disconnect node by address (no port)")
149
+ nodes = self.nodes[0].getpeerinfo()
150
+ assert nodes and all(node['addr'].startswith('127.0.0.') for node in nodes)
151
+ self.nodes[0].disconnectnode(address='127.0.0.1')
152
+ self.wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 0, timeout=10)
153
+ # reconnect the nodes
154
+ self.connect_nodes(0, 1)
155
+ self.connect_nodes(1, 0)
156
+
143
157
  self.log.info("disconnectnode: successfully disconnect node by node id")
144
- id1 = self.nodes[0].getpeerinfo()[0]['id']
158
+ id1 = [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1][0]['id']
145
159
  self.nodes[0].disconnectnode(nodeid=id1)
146
160
  self.wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 1, timeout=10)
147
161
  assert not [node for node in self.nodes[0].getpeerinfo() if node['id'] == id1]
162
+ self.connect_nodes(0, 1) # reconnect the node
163
+
164
+ self.log.info("disconnectnode: successfully disconnect node by subnet")
165
+ nodes = self.nodes[0].getpeerinfo()
166
+ assert nodes and all(node['addr'].startswith('127.0.0.') for node in nodes)
167
+ self.nodes[0].disconnectnode(address='127.0.0.1/24')
168
+ self.wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 0, timeout=10)
148
169
 
149
170
  if __name__ == '__main__':
150
171
  DisconnectBanTest(__file__).main()