The test sees only one entry in listbanned, the added one. If it is moved above the previous test, there will also be a second entry in listbanned, e.g.
[
{'address': '127.0.0.1/32', ...},
{'address': 'pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion', ...}
]
Here's a suggestion to do that, add logging, and also assert pre-add and post-remove (with the same number of lines):
+TOR_ADDR = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"
+
class SetBanTests(BitcoinTestFramework):
+ def banned_tor_addr(self, *, tor_addr=TOR_ADDR):
+ return list(filter(lambda ban_entry: ban_entry["address"] == tor_addr, self.nodes[1].listbanned()))
+
def run_test(self):
@@ -35,6 +40,13 @@ class SetBanTests(BitcoinTestFramework):
peerinfo = self.nodes[1].getpeerinfo()[0]
assert('noban' in peerinfo['permissions'])
+ self.log.info("Test that a Tor v3 address can be banned/unbanned")
+ assert(not self.banned_tor_addr())
+ self.nodes[1].setban(TOR_ADDR, "add")
+ assert(self.banned_tor_addr())
+ self.nodes[1].setban(TOR_ADDR, "remove")
+ assert(not self.banned_tor_addr())
+
# If we remove the ban, Node 0 should be able to reconnect even without noban permission
@@ -42,15 +54,5 @@ class SetBanTests(BitcoinTestFramework):
assert(not 'noban' in peerinfo['permissions'])
- tor_addr = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"
- self.nodes[1].setban(tor_addr, "add")
- is_banned = False
- for ban_entry in self.nodes[1].listbanned():
- if ban_entry['address'] == tor_addr:
- is_banned = True
- break
- assert(is_banned)
- self.nodes[1].setban(tor_addr, "remove")
if __name__ == '__main__':