Changeset View
Changeset View
Standalone View
Standalone View
test/functional/abc_rpc_excessiveblock.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# Copyright (c) 2017 The Bitcoin developers | # Copyright (c) 2017 The Bitcoin developers | ||||
# Distributed under the MIT software license, see the accompanying | # Distributed under the MIT software license, see the accompanying | ||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | # file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
# Exercise the Bitcoin ABC RPC calls. | # Exercise the Bitcoin ABC RPC calls. | ||||
import re | import re | ||||
from test_framework.cdefs import ( | from test_framework.cdefs import ( | ||||
DEFAULT_MAX_BLOCK_SIZE, | DEFAULT_MAX_BLOCK_SIZE, | ||||
LEGACY_MAX_BLOCK_SIZE, | LEGACY_MAX_BLOCK_SIZE, | ||||
ONE_MEGABYTE, | ONE_MEGABYTE, | ||||
) | ) | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import assert_equal, assert_raises_rpc_error | from test_framework.util import assert_equal | ||||
BLOCKSIZE_TOO_LOW = "Invalid parameter, excessiveblock must be larger than {}".format( | BLOCKSIZE_TOO_LOW = "Error: Excessive block size must be > {:,} bytes".format( | ||||
LEGACY_MAX_BLOCK_SIZE) | LEGACY_MAX_BLOCK_SIZE) | ||||
class ExcessiveBlockSizeRPCTest(BitcoinTestFramework): | class ExcessiveBlockSizeRPCTest(BitcoinTestFramework): | ||||
def set_test_params(self): | def set_test_params(self): | ||||
self.num_nodes = 1 | self.num_nodes = 1 | ||||
self.tip = None | self.tip = None | ||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.extra_args = [["-deprecatedrpc=setexcessiveblock"]] | self.extra_args = [[f"-blockmaxsize={LEGACY_MAX_BLOCK_SIZE}"]] | ||||
def check_subversion(self, pattern_str): | def check_subversion(self, pattern_str): | ||||
# Check that the subversion is set as expected | # Check that the subversion is set as expected | ||||
netinfo = self.nodes[0].getnetworkinfo() | netinfo = self.nodes[0].getnetworkinfo() | ||||
subversion = netinfo['subversion'] | subversion = netinfo['subversion'] | ||||
pattern = re.compile(pattern_str) | pattern = re.compile(pattern_str) | ||||
assert pattern.match(subversion) | assert pattern.match(subversion) | ||||
def test_excessiveblock(self): | def test_excessiveblock(self): | ||||
node = self.nodes[0] | |||||
# Check that we start with DEFAULT_MAX_BLOCK_SIZE | # Check that we start with DEFAULT_MAX_BLOCK_SIZE | ||||
getsize = self.nodes[0].getexcessiveblock() | getsize = node.getexcessiveblock() | ||||
ebs = getsize['excessiveBlockSize'] | ebs = getsize['excessiveBlockSize'] | ||||
assert_equal(ebs, DEFAULT_MAX_BLOCK_SIZE) | assert_equal(ebs, DEFAULT_MAX_BLOCK_SIZE) | ||||
# Check that setting to legacy size is ok | def setexcessiveblock(block_size): | ||||
self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE + 1) | self.restart_node( | ||||
getsize = self.nodes[0].getexcessiveblock() | 0, | ||||
ebs = getsize['excessiveBlockSize'] | self.extra_args[0] + | ||||
assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1) | [f"-excessiveblocksize={block_size}"]) | ||||
# Check that going below legacy size is not accepted | |||||
assert_raises_rpc_error(-8, BLOCKSIZE_TOO_LOW, | |||||
self.nodes[0].setexcessiveblock, LEGACY_MAX_BLOCK_SIZE) | |||||
getsize = self.nodes[0].getexcessiveblock() | |||||
ebs = getsize['excessiveBlockSize'] | |||||
assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1) | |||||
# Check that a negative size returns an error | # Check that setting to legacy size is ok | ||||
assert_raises_rpc_error(-8, BLOCKSIZE_TOO_LOW, | setexcessiveblock(LEGACY_MAX_BLOCK_SIZE + 1) | ||||
self.nodes[0].setexcessiveblock, -2 * LEGACY_MAX_BLOCK_SIZE) | getsize = node.getexcessiveblock() | ||||
getsize = self.nodes[0].getexcessiveblock() | |||||
ebs = getsize['excessiveBlockSize'] | ebs = getsize['excessiveBlockSize'] | ||||
assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1) | assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1) | ||||
# Check setting to 2MB | # Check setting to 2MB | ||||
self.nodes[0].setexcessiveblock(2 * ONE_MEGABYTE) | setexcessiveblock(2 * ONE_MEGABYTE) | ||||
getsize = self.nodes[0].getexcessiveblock() | getsize = node.getexcessiveblock() | ||||
ebs = getsize['excessiveBlockSize'] | ebs = getsize['excessiveBlockSize'] | ||||
assert_equal(ebs, 2 * ONE_MEGABYTE) | assert_equal(ebs, 2 * ONE_MEGABYTE) | ||||
# Check for EB correctness in the subver string | # Check for EB correctness in the subver string | ||||
self.check_subversion(r"/Bitcoin ABC:.*\(EB2\.0; .*\)/") | self.check_subversion(r"/Bitcoin ABC:.*\(EB2\.0; .*\)/") | ||||
# Check setting to 13MB | # Check setting to 13MB | ||||
self.nodes[0].setexcessiveblock(13 * ONE_MEGABYTE) | setexcessiveblock(13 * ONE_MEGABYTE) | ||||
getsize = self.nodes[0].getexcessiveblock() | getsize = node.getexcessiveblock() | ||||
ebs = getsize['excessiveBlockSize'] | ebs = getsize['excessiveBlockSize'] | ||||
assert_equal(ebs, 13 * ONE_MEGABYTE) | assert_equal(ebs, 13 * ONE_MEGABYTE) | ||||
# Check for EB correctness in the subver string | # Check for EB correctness in the subver string | ||||
self.check_subversion(r"/Bitcoin ABC:.*\(EB13\.0; .*\)/") | self.check_subversion(r"/Bitcoin ABC:.*\(EB13\.0; .*\)/") | ||||
# Check setting to 13.14MB | # Check setting to 13.14MB | ||||
self.nodes[0].setexcessiveblock(13140000) | setexcessiveblock(13140000) | ||||
getsize = self.nodes[0].getexcessiveblock() | getsize = node.getexcessiveblock() | ||||
ebs = getsize['excessiveBlockSize'] | ebs = getsize['excessiveBlockSize'] | ||||
assert_equal(ebs, 13.14 * ONE_MEGABYTE) | assert_equal(ebs, 13.14 * ONE_MEGABYTE) | ||||
# check for EB correctness in the subver string | # check for EB correctness in the subver string | ||||
self.check_subversion(r"/Bitcoin ABC:.*\(EB13\.1; .*\)/") | self.check_subversion(r"/Bitcoin ABC:.*\(EB13\.1; .*\)/") | ||||
def run_test(self): | def run_test(self): | ||||
self.test_excessiveblock() | self.test_excessiveblock() | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
ExcessiveBlockSizeRPCTest().main() | ExcessiveBlockSizeRPCTest().main() |