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. The two line-number columns refer to before and after.
test/functional/rpc_net.py
CHANGED
|
@@ -107,10 +107,28 @@ class NetTest(BitcoinTestFramework):
|
|
|
107
107
|
time_now = int(time.time())
|
|
108
108
|
peer_info = [x.getpeerinfo() for x in self.nodes]
|
|
109
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']):
|
|
110
|
+
for node, peer, field in product(range(self.num_nodes), range(2), ['last_block', 'last_transaction', 'last_block_announcement']):
|
|
111
111
|
assert field in peer_info[node][peer].keys()
|
|
112
112
|
if peer_info[node][peer][field] != 0:
|
|
113
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)
|
|
114
132
|
# check both sides of bidirectional connection between nodes
|
|
115
133
|
# the address bound to on one side will be the source address for the other node
|
|
116
134
|
assert_equal(peer_info[0][0]['addrbind'], peer_info[1][0]['addr'])
|
|
@@ -140,6 +158,7 @@ class NetTest(BitcoinTestFramework):
|
|
|
140
158
|
self.wait_until(lambda: self.nodes[0].getpeerinfo()[no_version_peer_id]["transport_protocol_type"] == "v2")
|
|
141
159
|
self.nodes[0].setmocktime(0)
|
|
142
160
|
peer_info = self.nodes[0].getpeerinfo()[no_version_peer_id]
|
|
161
|
+
peer_info.pop("cpu_load", None)
|
|
143
162
|
peer_info.pop("addr")
|
|
144
163
|
peer_info.pop("addrbind")
|
|
145
164
|
# 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
180
|
"inbound": True,
|
|
162
181
|
"inflight": [],
|
|
163
182
|
"last_block": 0,
|
|
183
|
+
"last_block_announcement": 0,
|
|
184
|
+
"forced_inbound": False,
|
|
185
|
+
"misbehavior_score": 0,
|
|
164
186
|
"last_transaction": 0,
|
|
165
187
|
"lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
|
|
166
188
|
"lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
|
|
167
189
|
"minfeefilter": Decimal("0E-8"),
|
|
168
190
|
"network": "not_publicly_routable",
|
|
169
|
-
"permissions": [],
|
|
191
|
+
"permissions": ["bloomfilter"],
|
|
170
192
|
"presynced_headers": -1,
|
|
171
193
|
"relaytxes": False,
|
|
172
194
|
"inv_to_send": 0,
|