message: test: Add test for maxtxfee option
diff: from test_framework.test_framework import BitcoinTestFramework
  from test_framework.util import (
  assert_equal,
  + assert_raises_rpc_error,
  )
  from test_framework.blocktools import (
  TIME_GENESIS_BLOCK,
  @@ -26,6 +27,10 @@ class CreateTxWalletTest(BitcoinTestFramework):
  self.nodes[0].generate(200)
  self.nodes[0].setmocktime(0)
  + self.test_anti_fee_sniping()
  + self.test_tx_size_too_large()
  +
  + def test_anti_fee_sniping(self):
  self.log.info('Check that we have some (old) blocks and that anti-fee-sniping is disabled')
  assert_equal(self.nodes[0].getblockchaininfo()['blocks'], 200)
  txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
  @@ -38,6 +43,40 @@ class CreateTxWalletTest(BitcoinTestFramework):
  tx = self.nodes[0].decoderawtransaction(self.nodes[0].gettransaction(txid)['hex'])
  assert 0 < tx['locktime'] <= 201
  + def test_tx_size_too_large(self):
  + # More than 10kB of outputs, so that we hit -maxtxfee with a high feerate
  + outputs = {self.nodes[0].getnewaddress(address_type='bech32'): 0.000025 for i in range(400)}
  + raw_tx = self.nodes[0].createrawtransaction(inputs=[], outputs=outputs)
  +
  + for fee_setting in ['-minrelaytxfee=0.01', '-mintxfee=0.01', '-paytxfee=0.01']:
  + self.log.info('Check maxtxfee in combination with {}'.format(fee_setting))
  + self.restart_node(0, extra_args=[fee_setting])
  + assert_raises_rpc_error(
  + -6,
  + "Fee exceeds maximum configured by -maxtxfee",
  + lambda: self.nodes[0].sendmany(dummy="", amounts=outputs),
  + )
  + assert_raises_rpc_error(
  + -4,
  + "Fee exceeds maximum configured by -maxtxfee",
  + lambda: self.nodes[0].fundrawtransaction(hexstring=raw_tx),
  + )
  +
  + self.log.info('Check maxtxfee in combination with settxfee')
  + self.restart_node(0)
  + self.nodes[0].settxfee(0.01)
  + assert_raises_rpc_error(
  + -6,
  + "Fee exceeds maximum configured by -maxtxfee",
  + lambda: self.nodes[0].sendmany(dummy="", amounts=outputs),
  + )
  + assert_raises_rpc_error(
  + -4,
  + "Fee exceeds maximum configured by -maxtxfee",
  + lambda: self.nodes[0].fundrawtransaction(hexstring=raw_tx),
  + )
  + self.nodes[0].settxfee(0)
  +
  if __name__ == '__main__':
  CreateTxWalletTest().main()
  