aboutsummaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2016-12-20 13:33:15 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2016-12-20 13:33:19 +0100
commitfe39f26b438e0c937570becbb6bcf1eaf1533825 (patch)
treede6b339828d676de15ca1b05b8bee3bf8b087a46 /qa
parent7201dd7732fa69b498b1d647c66c2460af9bed7b (diff)
parente1ff0dbe19c3e7df21206d22bb12c686cd130b4c (diff)
downloadbitcoin-fe39f26b438e0c937570becbb6bcf1eaf1533825.tar.xz
Merge #9382: [backport 0.13] Prefer coins that have fewer ancestors, sanity check txn before ATMP
e1ff0db reduce number of lookups in TransactionWithinChainLimit (Gregory Sanders) 4bf2bec Test for fix of txn chaining in wallet (Gregory Sanders) f00066a CreateTransaction: Don't return success with too-many-ancestor txn (Gregory Sanders) bdd6d4c SelectCoinsMinConf: Prefer coins with fewer ancestors (Gregory Sanders)
Diffstat (limited to 'qa')
-rwxr-xr-xqa/rpc-tests/wallet.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py
index 3c0dc0f4ea..992fb8a2d6 100755
--- a/qa/rpc-tests/wallet.py
+++ b/qa/rpc-tests/wallet.py
@@ -330,10 +330,12 @@ class WalletTest (BitcoinTestFramework):
# disabled until issue is fixed: https://github.com/bitcoin/bitcoin/issues/7463
# '-salvagewallet',
]
+ chainlimit = 6
for m in maintenance:
print("check " + m)
stop_nodes(self.nodes)
- self.nodes = start_nodes(3, self.options.tmpdir, [[m]] * 3)
+ # set lower ancestor limit for later
+ self.nodes = start_nodes(3, self.options.tmpdir, [[m, "-limitancestorcount="+str(chainlimit)]] * 3)
while m == '-reindex' and [block_count] * 3 != [self.nodes[i].getblockcount() for i in range(3)]:
# reindex will leave rpc warm up "early"; Wait for it to finish
time.sleep(0.1)
@@ -346,5 +348,26 @@ class WalletTest (BitcoinTestFramework):
assert_equal(coinbase_tx_1["transactions"][0]["blockhash"], blocks[1])
assert_equal(len(self.nodes[0].listsinceblock(blocks[1])["transactions"]), 0)
+ # ==Check that wallet prefers to use coins that don't exceed mempool limits =====
+
+ # Get all non-zero utxos together
+ chain_addrs = [self.nodes[0].getnewaddress(), self.nodes[0].getnewaddress()]
+ singletxid = self.nodes[0].sendtoaddress(chain_addrs[0], self.nodes[0].getbalance(), "", "", True)
+ self.nodes[0].generate(1)
+ node0_balance = self.nodes[0].getbalance()
+ # Split into two chains
+ rawtx = self.nodes[0].createrawtransaction([{"txid":singletxid, "vout":0}], {chain_addrs[0]:node0_balance/2-Decimal('0.01'), chain_addrs[1]:node0_balance/2-Decimal('0.01')})
+ signedtx = self.nodes[0].signrawtransaction(rawtx)
+ singletxid = self.nodes[0].sendrawtransaction(signedtx["hex"])
+ txids = [singletxid, singletxid]
+ self.nodes[0].generate(1)
+
+ # Make a long chain of unconfirmed payments without hitting mempool limit
+ txid_list = []
+ for i in range(chainlimit*2):
+ txid_list.append(self.nodes[0].sendtoaddress(chain_addrs[0], Decimal('0.0001')))
+ assert_equal(self.nodes[0].getmempoolinfo()['size'], chainlimit*2)
+ assert_equal(len(txid_list), chainlimit*2)
+
if __name__ == '__main__':
WalletTest().main()