Changeset View
Changeset View
Standalone View
Standalone View
test/functional/feature_uaclient.py
- This file was added.
Property | Old Value | New Value |
---|---|---|
File Mode | null | 100755 |
#!/usr/bin/env python3 | |||||
# Copyright (c) 2021 The Bitcoin developers | |||||
# Distributed under the MIT software license, see the accompanying | |||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
"""Test the -uaclient option.""" | |||||
import re | |||||
from test_framework.test_framework import BitcoinTestFramework | |||||
from test_framework.test_node import ErrorMatch | |||||
from test_framework.util import assert_equal | |||||
class UseragentTest(BitcoinTestFramework): | |||||
def set_test_params(self): | |||||
self.num_nodes = 1 | |||||
self.setup_clean_chain = True | |||||
def run_test(self): | |||||
self.log.info("test -uaclient") | |||||
default_useragent = self.nodes[0].getnetworkinfo()["subversion"] | |||||
expected = "/Bitcoin ABC:" | |||||
assert_equal(default_useragent[:len(expected)], expected) | |||||
self.restart_node(0, ["-uaclient=Foo Client:2000"]) | |||||
foo_ua = self.nodes[0].getnetworkinfo()["subversion"] | |||||
expected = "/Foo Client:2000" | |||||
assert_equal(foo_ua[:len(expected)], expected) | |||||
self.log.info( | |||||
"non-numeric version allowed (although not recommended in BIP14)") | |||||
self.restart_node(0, ["-uaclient=Foo Client:Version Two"]) | |||||
foo_ua = self.nodes[0].getnetworkinfo()["subversion"] | |||||
expected = "/Foo Client:Version Two" | |||||
assert_equal(foo_ua[:len(expected)], expected) | |||||
self.log.info("test -uaclient doesn't break -uacomment") | |||||
self.restart_node(0, ["-uaclient=Bar Client:3000", | |||||
"-uacomment=spam bacon and eggs"]) | |||||
bar_ua = self.nodes[0].getnetworkinfo()["subversion"] | |||||
expected = "/Bar Client:3000" | |||||
assert_equal(bar_ua[:len(expected)], expected) | |||||
assert "spam bacon and eggs" in bar_ua | |||||
self.log.info("test -uaclient doesn't have form Name:Version") | |||||
self.stop_node(0) | |||||
expected = r"Error: -uaclient \(spam\) must be of form ClientName:Version\." | |||||
self.nodes[0].assert_start_raises_init_error( | |||||
["-uaclient=spam"], expected, match=ErrorMatch.FULL_REGEX) | |||||
self.log.info("test -uaclient multiple colons") | |||||
self.stop_node(0) | |||||
expected = r"Error: -uaclient client version \(2:3\) contains invalid characters\." | |||||
self.nodes[0].assert_start_raises_init_error( | |||||
["-uaclient=spam:2:3"], expected, match=ErrorMatch.FULL_REGEX) | |||||
self.log.info("test -uaclient max length") | |||||
expected = r"Error: Total length of network version string \([0-9]+\) exceeds maximum length \([0-9]+\)\. Reduce the number or size of uacomments\." | |||||
self.nodes[0].assert_start_raises_init_error( | |||||
["-uaclient=" + "a" * 256 + ":3000"], expected, match=ErrorMatch.FULL_REGEX) | |||||
self.log.info("test -uaclient invalid characters") | |||||
for invalid_char in ['/', '(', ')', '*', '!', '₿', '🏃']: | |||||
# for client name | |||||
expected = r"Error: -uaclient client name \(" + \ | |||||
re.escape(invalid_char) + r"\) contains invalid characters\." | |||||
self.nodes[0].assert_start_raises_init_error( | |||||
["-uaclient=" + invalid_char + ":Version"], expected, match=ErrorMatch.FULL_REGEX) | |||||
# for client version | |||||
expected = r"Error: -uaclient client version \(" + \ | |||||
re.escape(invalid_char) + r"\) contains invalid characters\." | |||||
self.nodes[0].assert_start_raises_init_error( | |||||
["-uaclient=Name:" + invalid_char], expected, match=ErrorMatch.FULL_REGEX) | |||||
if __name__ == '__main__': | |||||
UseragentTest().main() |