Skip to content
Bitcoin Roots

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

test/functional/rpc_net.py

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

File metadata
index 41ecbbed22d96b0f81c23bf29048b60e7e5c9203..f830d14a4c80197e9be68593b05a767ce96541ad 100755

Download original patch · Release notes

Diff rows 1–63 of 63. 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
@@ -37,7 +37,7 @@ def assert_net_servicesnames(servicesflag, servicenames):
37
  """
38
  servicesflag_generated = 0
39
  for servicename in servicenames:
40
- servicesflag_generated |= getattr(test_framework.messages, 'NODE_' + servicename)
41
  assert servicesflag_generated == servicesflag
42
 
43
 
@@ -104,7 +104,8 @@ class NetTest(BitcoinTestFramework):
104
  time_now = int(time.time())
105
  peer_info = [x.getpeerinfo() for x in self.nodes]
106
  # Verify last_block and last_transaction keys/values.
107
- for node, peer, field in product(range(self.num_nodes), range(2), ['last_block', 'last_transaction']):
 
108
  assert field in peer_info[node][peer].keys()
109
  if peer_info[node][peer][field] != 0:
110
  assert_approx(peer_info[node][peer][field], time_now, vspan=60)
@@ -117,6 +118,10 @@ class NetTest(BitcoinTestFramework):
117
  # check the `servicesnames` field
118
  for info in peer_info:
119
  assert_net_servicesnames(int(info[0]["services"], 0x10), info[0]["servicesnames"])
 
 
 
 
120
 
121
  assert_equal(peer_info[0][0]['connection_type'], 'inbound')
122
  assert_equal(peer_info[0][1]['connection_type'], 'manual')
@@ -126,6 +131,7 @@ class NetTest(BitcoinTestFramework):
126
 
127
  # Check dynamically generated networks list in getpeerinfo help output.
128
  assert "(ipv4, ipv6, onion, i2p, cjdns, not_publicly_routable)" in self.nodes[0].help("getpeerinfo")
 
129
 
130
  self.log.info("Check getpeerinfo output before a version message was sent")
131
  no_version_peer_id = 2
@@ -142,6 +148,7 @@ class NetTest(BitcoinTestFramework):
142
  # The next two fields will vary for v2 connections because we send a rng-based number of decoy messages
143
  peer_info.pop("bytesrecv")
144
  peer_info.pop("bytessent")
 
145
  assert_equal(
146
  peer_info,
147
  {
@@ -158,12 +165,14 @@ class NetTest(BitcoinTestFramework):
158
  "inbound": True,
159
  "inflight": [],
160
  "last_block": 0,
 
161
  "last_transaction": 0,
162
  "lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
163
  "lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
164
  "minfeefilter": Decimal("0E-8"),
165
  "network": "not_publicly_routable",
166
- "permissions": [],
 
167
  "presynced_headers": -1,
168
  "relaytxes": False,
169
  "services": "0000000000000000",
@@ -176,6 +185,7 @@ class NetTest(BitcoinTestFramework):
176
  "timeoffset": 0,
177
  "transport_protocol_type": "v1" if not self.options.v2transport else "v2",
178
  "version": 0,
 
179
  },
180
  )
181
  no_version_peer.peer_disconnect()
 
37
  """
38
  servicesflag_generated = 0
39
  for servicename in servicenames:
40
+ servicesflag_generated |= getattr(test_framework.messages, 'NODE_' + servicename.rstrip('?'))
41
  assert servicesflag_generated == servicesflag
42
 
43
 
 
104
  time_now = int(time.time())
105
  peer_info = [x.getpeerinfo() for x in self.nodes]
106
  # Verify last_block and last_transaction keys/values.
107
+ for node, peer, field in product(range(self.num_nodes), range(2),
108
+ ['last_block', 'last_block_announcement', 'last_transaction']):
109
  assert field in peer_info[node][peer].keys()
110
  if peer_info[node][peer][field] != 0:
111
  assert_approx(peer_info[node][peer][field], time_now, vspan=60)
 
118
  # check the `servicesnames` field
119
  for info in peer_info:
120
  assert_net_servicesnames(int(info[0]["services"], 0x10), info[0]["servicesnames"])
121
+ # CPU accounting is optional, but when the platform records it, the
122
+ # operator-facing load value is a non-negative fraction of connection time.
123
+ if "cpu_load" in info[0]:
124
+ assert info[0]["cpu_load"] >= 0
125
 
126
  assert_equal(peer_info[0][0]['connection_type'], 'inbound')
127
  assert_equal(peer_info[0][1]['connection_type'], 'manual')
 
131
 
132
  # Check dynamically generated networks list in getpeerinfo help output.
133
  assert "(ipv4, ipv6, onion, i2p, cjdns, not_publicly_routable)" in self.nodes[0].help("getpeerinfo")
134
+ assert "cpu_load" in self.nodes[0].help("getpeerinfo")
135
 
136
  self.log.info("Check getpeerinfo output before a version message was sent")
137
  no_version_peer_id = 2
 
148
  # The next two fields will vary for v2 connections because we send a rng-based number of decoy messages
149
  peer_info.pop("bytesrecv")
150
  peer_info.pop("bytessent")
151
+ peer_info.pop("cpu_load", None)
152
  assert_equal(
153
  peer_info,
154
  {
 
165
  "inbound": True,
166
  "inflight": [],
167
  "last_block": 0,
168
+ "last_block_announcement": 0,
169
  "last_transaction": 0,
170
  "lastrecv": 0 if not self.options.v2transport else no_version_peer_conntime,
171
  "lastsend": 0 if not self.options.v2transport else no_version_peer_conntime,
172
  "minfeefilter": Decimal("0E-8"),
173
  "network": "not_publicly_routable",
174
+ "permissions": ['bloomfilter'],
175
+ "forced_inbound": False,
176
  "presynced_headers": -1,
177
  "relaytxes": False,
178
  "services": "0000000000000000",
 
185
  "timeoffset": 0,
186
  "transport_protocol_type": "v1" if not self.options.v2transport else "v2",
187
  "version": 0,
188
+ "misbehavior_score": 0,
189
  },
190
  )
191
  no_version_peer.peer_disconnect()