feature_uacomment.py
1 #!/usr/bin/env python3 2 # Copyright (c) 2017-2019 The Bitcoin Core developers 3 # Distributed under the MIT software license, see the accompanying 4 # file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 """Test the -uacomment option.""" 6 7 import re 8 9 from test_framework.test_framework import BitcoinTestFramework 10 from test_framework.test_node import ErrorMatch 11 from test_framework.util import assert_equal 12 13 14 class UacommentTest(BitcoinTestFramework): 15 def set_test_params(self): 16 self.num_nodes = 1 17 self.setup_clean_chain = True 18 19 def run_test(self): 20 self.log.info("test multiple -uacomment") 21 test_uacomment = self.nodes[0].getnetworkinfo()["subversion"][-12:-1] 22 assert_equal(test_uacomment, "(testnode0)") 23 24 self.restart_node(0, ["-uacomment=foo"]) 25 foo_uacomment = self.nodes[0].getnetworkinfo()["subversion"][-17:-1] 26 assert_equal(foo_uacomment, "(testnode0; foo)") 27 28 self.log.info("test -uacomment max length") 29 self.stop_node(0) 30 expected = r"Error: Total length of network version string \([0-9]+\) exceeds maximum length \(256\). Reduce the number or size of uacomments." 31 self.nodes[0].assert_start_raises_init_error(["-uacomment=" + 'a' * 256], expected, match=ErrorMatch.FULL_REGEX) 32 33 self.log.info("test -uacomment unsafe characters") 34 for unsafe_char in ['/', ':', '(', ')', '₿', '🏃']: 35 expected = r"Error: User Agent comment \(" + re.escape(unsafe_char) + r"\) contains unsafe characters." 36 self.nodes[0].assert_start_raises_init_error(["-uacomment=" + unsafe_char], expected, match=ErrorMatch.FULL_REGEX) 37 38 39 if __name__ == '__main__': 40 UacommentTest().main()