Create feelimit.py test
Create feelimit.py test to verify the updated fee values now rounding has been eliminated.
This commit is contained in:
parent
ce6e3d8137
commit
e90e8e5cba
|
@ -156,6 +156,7 @@ testScripts = [
|
|||
'import-rescan.py',
|
||||
'harddustlimit.py',
|
||||
'paytxfee.py',
|
||||
'feelimit.py',
|
||||
# While fee bumping should work in Doge, these tests depend on free transactions, which we don't support.
|
||||
# Disable until we can do a full rewrite of the tests (possibly upstream), or revise fee schedule, or something
|
||||
'bumpfee.py',
|
||||
|
|
77
qa/rpc-tests/feelimit.py
Normal file
77
qa/rpc-tests/feelimit.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2021 The Dogecoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
"""Fee limit QA test.
|
||||
# Tests nodes under fee limit, verifies fee rounding
|
||||
"""
|
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import *
|
||||
from decimal import Decimal
|
||||
|
||||
class FeeLimitTest(BitcoinTestFramework):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 2
|
||||
|
||||
def setup_network(self, split=False):
|
||||
self.nodes = []
|
||||
self.nodes.append(start_node(0, self.options.tmpdir, []))
|
||||
self.nodes.append(start_node(1, self.options.tmpdir, []))
|
||||
|
||||
connect_nodes_bi(self.nodes,0,1)
|
||||
|
||||
self.is_network_split=False
|
||||
self.sync_all()
|
||||
|
||||
def run_test(self):
|
||||
# mine some blocks
|
||||
self.nodes[0].generate(101)
|
||||
self.sync_all()
|
||||
|
||||
# Output address
|
||||
addr_to = self.nodes[1].getnewaddress()
|
||||
lower_fee_per_kb = Decimal("0.001")
|
||||
|
||||
# Force generating a transaction with 1.14.5-like fees by manually building the tx
|
||||
utx = self.nodes[0].listunspent()[0]
|
||||
inputs = [ {'txid' : utx['txid'], 'vout' : utx['vout']}]
|
||||
outputs = { addr_to : utx['amount'] - Decimal("1.0") }
|
||||
rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
|
||||
|
||||
# Work out how big this transaction would be, then change the output to match
|
||||
tx_size = count_bytes(self.nodes[0].signrawtransaction(rawtx)['hex'])
|
||||
fee = lower_fee_per_kb * (tx_size + 1) / Decimal("1000")
|
||||
outputs = { addr_to : utx['amount'] - fee }
|
||||
rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
|
||||
signedtx = self.nodes[0].signrawtransaction(rawtx)
|
||||
self.nodes[0].sendrawtransaction(signedtx["hex"])
|
||||
|
||||
# Sync all of the nodes
|
||||
self.sync_all()
|
||||
|
||||
# Check if the TX made it to node 2
|
||||
assert_equal(self.nodes[1].getmempoolinfo()['size'], 1)
|
||||
assert_equal(self.nodes[0].getmempoolinfo()['size'], 1)
|
||||
|
||||
# Force generating a transaction with fees which are too low to relay
|
||||
too_low_fee = lower_fee_per_kb * (tx_size - 4) / Decimal("1000")
|
||||
utx = self.nodes[0].listunspent()[0]
|
||||
inputs = [ {'txid' : utx['txid'], 'vout' : utx['vout']}]
|
||||
outputs = { self.nodes[1].getnewaddress() : utx['amount'] - too_low_fee }
|
||||
rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
|
||||
signedtx = self.nodes[0].signrawtransaction(rawtx)
|
||||
self.nodes[0].sendrawtransaction(signedtx["hex"])
|
||||
|
||||
# wait 10 seconds to sync mempools
|
||||
time.sleep(10)
|
||||
|
||||
# Check the TX did not relay, so is only on node 0
|
||||
assert_equal(self.nodes[1].getmempoolinfo()['size'], 1)
|
||||
assert_equal(self.nodes[0].getmempoolinfo()['size'], 2)
|
||||
|
||||
if __name__ == '__main__':
|
||||
FeeLimitTest().main()
|
Loading…
Reference in a new issue