Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 5: [PATCH 05/17] feat(net): preserve Roots peer controls and health view on v31

test/functional/rpc_net.py

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

File metadata
index 30e0d536e42d1d5b9b91cb69e8608a0c5fa7365f..9c7185607114ee08d5f18b835c278e88d0f09db0 100755

Download original patch · Release notes

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

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

test/functional/rpc_net.py CHANGED
@@ -107,10 +107,28 @@ class NetTest(BitcoinTestFramework):
107
  time_now = int(time.time())
108
  peer_info = [x.getpeerinfo() for x in self.nodes]
109
  # Verify last_block and last_transaction keys/values.
110
- for node, peer, field in product(range(self.num_nodes), range(2), ['last_block', 'last_transaction']):
111
  assert field in peer_info[node][peer].keys()
112
  if peer_info[node][peer][field] != 0:
113
  assert_approx(peer_info[node][peer][field], time_now, vspan=60)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  # check both sides of bidirectional connection between nodes
115
  # the address bound to on one side will be the source address for the other node
116
  assert_equal(peer_info[0][0]['addrbind'], peer_info[1][0]['addr'])
@@ -140,6 +158,7 @@ class NetTest(BitcoinTestFramework):
140
  self.wait_until(lambda: self.nodes[0].getpeerinfo()[no_version_peer_id]["transport_protocol_type"] == "v2")
141
  self.nodes[0].setmocktime(0)
142
  peer_info = self.nodes[0].getpeerinfo()[no_version_peer_id]
 
143
  peer_info.pop("addr")
144
  peer_info.pop("addrbind")
145
  # The next two fields will vary for v2 connections because we send a rng-based number of decoy messages
@@ -161,12 +180,15 @@ class NetTest(BitcoinTestFramework):
161
  "inbound": True,
162
  "inflight": [],
163
  "last_block": 0,
 
 
 
164
  "last_transaction": 0,
165
  "lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
166
  "lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
167
  "minfeefilter": Decimal("0E-8"),
168
  "network": "not_publicly_routable",
169
- "permissions": [],
170
  "presynced_headers": -1,
171
  "relaytxes": False,
172
  "inv_to_send": 0,
 
107
  time_now = int(time.time())
108
  peer_info = [x.getpeerinfo() for x in self.nodes]
109
  # Verify last_block and last_transaction keys/values.
110
+ for node, peer, field in product(range(self.num_nodes), range(2), ['last_block', 'last_transaction', 'last_block_announcement']):
111
  assert field in peer_info[node][peer].keys()
112
  if peer_info[node][peer][field] != 0:
113
  assert_approx(peer_info[node][peer][field], time_now, vspan=60)
114
+ for info in peer_info:
115
+ for peer in info:
116
+ assert_equal(peer["forced_inbound"], False)
117
+ assert_equal(peer["misbehavior_score"], 0)
118
+ if "cpu_load" in peer:
119
+ assert_greater_than(peer["cpu_load"], 0)
120
+ # A zero or backwards connection duration cannot produce CPU load.
121
+ conntime = peer_info[0][0]["conntime"]
122
+ for mocktime in (conntime, conntime - 1):
123
+ self.nodes[0].setmocktime(mocktime)
124
+ assert "cpu_load" not in self.nodes[0].getpeerinfo()[0]
125
+ if platform.system() == "Linux" and hasattr(time, "CLOCK_THREAD_CPUTIME_ID"):
126
+ # The supported live CPU clock must report processing, not silently
127
+ # leave the optional field permanently absent.
128
+ self.nodes[0].setmocktime(conntime + 1)
129
+ assert_greater_than(self.nodes[0].getpeerinfo()[0]["cpu_load"], 0)
130
+ self.nodes[0].setmocktime(0)
131
+ assert_greater_than(max(peer["last_block_announcement"] for peer in peer_info[0]), 0)
132
  # check both sides of bidirectional connection between nodes
133
  # the address bound to on one side will be the source address for the other node
134
  assert_equal(peer_info[0][0]['addrbind'], peer_info[1][0]['addr'])
 
158
  self.wait_until(lambda: self.nodes[0].getpeerinfo()[no_version_peer_id]["transport_protocol_type"] == "v2")
159
  self.nodes[0].setmocktime(0)
160
  peer_info = self.nodes[0].getpeerinfo()[no_version_peer_id]
161
+ peer_info.pop("cpu_load", None)
162
  peer_info.pop("addr")
163
  peer_info.pop("addrbind")
164
  # The next two fields will vary for v2 connections because we send a rng-based number of decoy messages
 
180
  "inbound": True,
181
  "inflight": [],
182
  "last_block": 0,
183
+ "last_block_announcement": 0,
184
+ "forced_inbound": False,
185
+ "misbehavior_score": 0,
186
  "last_transaction": 0,
187
  "lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
188
  "lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
189
  "minfeefilter": Decimal("0E-8"),
190
  "network": "not_publicly_routable",
191
+ "permissions": ["bloomfilter"],
192
  "presynced_headers": -1,
193
  "relaytxes": False,
194
  "inv_to_send": 0,