Skip to content
Bitcoin Roots

v30.3-roots.1 · Commit 3: [PATCH 03/68] feat(policy): preserve Roots relay and network controls on Core 30.3

test/functional/p2p_disconnect_ban.py

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

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