diff --git a/qa/rpc-tests/wallet_mergetoaddress.py b/qa/rpc-tests/wallet_mergetoaddress.py index ff3534e9b..d8531319c 100755 --- a/qa/rpc-tests/wallet_mergetoaddress.py +++ b/qa/rpc-tests/wallet_mergetoaddress.py @@ -324,13 +324,25 @@ class WalletMergeToAddressTest (BitcoinTestFramework): self.sync_all() # Verify maximum number of notes which node 0 can shield can be set by the limit parameter - result = self.nodes[0].z_mergetoaddress([myzaddr], myzaddr, 0, 50, 2) - assert_equal(result["mergingUTXOs"], Decimal('0')) + # Also check that we can set off a second merge before the first one is complete + result1 = self.nodes[0].z_mergetoaddress([myzaddr], myzaddr, 0, 50, 2) + result2 = self.nodes[0].z_mergetoaddress([myzaddr], myzaddr, 0, 50, 2) + + # First merge should select from all notes + assert_equal(result1["mergingUTXOs"], Decimal('0')) # Remaining UTXOs are only counted if we are trying to merge any UTXOs - assert_equal(result["remainingUTXOs"], Decimal('0')) - assert_equal(result["mergingNotes"], Decimal('2')) - assert_equal(result["remainingNotes"], Decimal('3')) - wait_and_assert_operationid_status(self.nodes[0], result['opid']) + assert_equal(result1["remainingUTXOs"], Decimal('0')) + assert_equal(result1["mergingNotes"], Decimal('2')) + assert_equal(result1["remainingNotes"], Decimal('3')) + + # Second merge should ignore locked notes + assert_equal(result2["mergingUTXOs"], Decimal('0')) + assert_equal(result2["remainingUTXOs"], Decimal('0')) + assert_equal(result2["mergingNotes"], Decimal('2')) + assert_equal(result2["remainingNotes"], Decimal('1')) + + wait_and_assert_operationid_status(self.nodes[0], result1['opid']) + wait_and_assert_operationid_status(self.nodes[0], result2['opid']) self.sync_all() self.nodes[1].generate(1) self.sync_all() @@ -340,7 +352,7 @@ class WalletMergeToAddressTest (BitcoinTestFramework): assert_equal(result["mergingUTXOs"], Decimal('10')) assert_equal(result["remainingUTXOs"], Decimal('7')) assert_equal(result["mergingNotes"], Decimal('2')) - assert_equal(result["remainingNotes"], Decimal('2')) + assert_equal(result["remainingNotes"], Decimal('1')) wait_and_assert_operationid_status(self.nodes[0], result['opid']) # Don't sync node 2 which rejects the tx due to its mempooltxinputlimit sync_blocks(self.nodes[:2])