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,
|