bitcoin/test/functional/importprunedfunds.py
Wladimir J. van der Laan 1646f9c760
Merge #11447: 0.15.1: Backports
20cdc2b Fix importmulti bug when importing an already imported key (Pedro Branco)
405e069 Update importprivkey named args documentation (Dusty Williams)
c94527a [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 (fanquake)
27e861a net: Improve and document SOCKS code (Wladimir J. van der Laan)
dea3b87 Add new step to clean $PATH var by removing /mnt specific Window's %PATH% paths that cause issues with the make system (Donal OConnor)
a43be5b rpc: Prevent `dumpwallet` from overwriting files (Wladimir J. van der Laan)
b6c0209 Fix validationinterface build on super old boost/clang (Matt Corallo)
6a62c74 qt: Backup former GUI settings on `-resetguisettings` (Wladimir J. van der Laan)
0fe2a9a when clearing addrman clear mapInfo and mapAddr (Gregory Sanders)
6b4d9f2 wallet: update stored witness in AddToWallet (Suhas Daftuar)
62d18cd doc: Prepare release notes for 0.15.1 (MarcoFalke)
8b61aee Put back inadvertently removed copyright notices (Paul Berg)
75997c3 Disallow uncompressed pubkeys in bitcoin-tx [multisig] output adds (Matt Corallo)
8d13b42 Replace save|restoreWindowGeometry with Qt functions (MeshCollider)
6642558 [Qt] Add delay before filtering transactions Fixes 3141 (Lucas Betschart)
19d63e8 Remove custom fee radio group (Andrew Chow)
b1a6c94 rpc: make estimatesmartfee argument naming consistent with documentation (Wladimir J. van der Laan)
921542e rpc: update cli for estimatefee argument rename (Wladimir J. van der Laan)
2e31b1d Fix division by zero in time remaining (MeshCollider)
47c02a8 qt: Use IsMine to validate custom change address (Chris Moore)
7310f1f [Qt] Fix display of package name on 'open config file' tooltip (Daniel Edgecumbe)
2cb720a Acquire cs_main lock before cs_wallet during wallet initialization (Russell Yanofsky)
b278a43 rpc: Write authcookie atomically (Wladimir J. van der Laan)
50bd3f6 Avoid returning a BIP9Stats object with uninitialized values (practicalswift)
9e8aae3 [wallet] Close DB on error. (Karl-Johan Alm)

Pull request description:

  This mostly backports various commits that fix(ed) bugs and issues.

  However, it also includes two patches for qt that only fix minor issues,
  as well as some doc patches.

Tree-SHA512: 5165e309faf6b4395fdf2f6662ccc0d58306971f3769e675504f17b2055efe29b2919f22d0dbf78c4c2dc7fd5c9d08a2c53345615e4a1df73914526687c9d571
2017-10-18 20:55:35 +02:00

116 lines
4.6 KiB
Python
Executable File

#!/usr/bin/env python3
# Copyright (c) 2014-2016 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test the importprunedfunds and removeprunedfunds RPCs."""
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
class ImportPrunedFundsTest(BitcoinTestFramework):
def set_test_params(self):
self.setup_clean_chain = True
self.num_nodes = 2
def run_test(self):
self.log.info("Mining blocks...")
self.nodes[0].generate(101)
self.sync_all()
# address
address1 = self.nodes[0].getnewaddress()
# pubkey
address2 = self.nodes[0].getnewaddress()
address2_pubkey = self.nodes[0].validateaddress(address2)['pubkey'] # Using pubkey
# privkey
address3 = self.nodes[0].getnewaddress()
address3_privkey = self.nodes[0].dumpprivkey(address3) # Using privkey
#Check only one address
address_info = self.nodes[0].validateaddress(address1)
assert_equal(address_info['ismine'], True)
self.sync_all()
#Node 1 sync test
assert_equal(self.nodes[1].getblockcount(),101)
#Address Test - before import
address_info = self.nodes[1].validateaddress(address1)
assert_equal(address_info['iswatchonly'], False)
assert_equal(address_info['ismine'], False)
address_info = self.nodes[1].validateaddress(address2)
assert_equal(address_info['iswatchonly'], False)
assert_equal(address_info['ismine'], False)
address_info = self.nodes[1].validateaddress(address3)
assert_equal(address_info['iswatchonly'], False)
assert_equal(address_info['ismine'], False)
#Send funds to self
txnid1 = self.nodes[0].sendtoaddress(address1, 0.1)
self.nodes[0].generate(1)
rawtxn1 = self.nodes[0].gettransaction(txnid1)['hex']
proof1 = self.nodes[0].gettxoutproof([txnid1])
txnid2 = self.nodes[0].sendtoaddress(address2, 0.05)
self.nodes[0].generate(1)
rawtxn2 = self.nodes[0].gettransaction(txnid2)['hex']
proof2 = self.nodes[0].gettxoutproof([txnid2])
txnid3 = self.nodes[0].sendtoaddress(address3, 0.025)
self.nodes[0].generate(1)
rawtxn3 = self.nodes[0].gettransaction(txnid3)['hex']
proof3 = self.nodes[0].gettxoutproof([txnid3])
self.sync_all()
#Import with no affiliated address
assert_raises_jsonrpc(-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1)
balance1 = self.nodes[1].getbalance("", 0, True)
assert_equal(balance1, Decimal(0))
#Import with affiliated address with no rescan
self.nodes[1].importaddress(address2, "add2", False)
result2 = self.nodes[1].importprunedfunds(rawtxn2, proof2)
balance2 = self.nodes[1].getbalance("add2", 0, True)
assert_equal(balance2, Decimal('0.05'))
#Import with private key with no rescan
self.nodes[1].importprivkey(privkey=address3_privkey, label="add3", rescan=False)
self.nodes[1].importprunedfunds(rawtxn3, proof3)
balance3 = self.nodes[1].getbalance("add3", 0, False)
assert_equal(balance3, Decimal('0.025'))
balance3 = self.nodes[1].getbalance("*", 0, True)
assert_equal(balance3, Decimal('0.075'))
#Addresses Test - after import
address_info = self.nodes[1].validateaddress(address1)
assert_equal(address_info['iswatchonly'], False)
assert_equal(address_info['ismine'], False)
address_info = self.nodes[1].validateaddress(address2)
assert_equal(address_info['iswatchonly'], True)
assert_equal(address_info['ismine'], False)
address_info = self.nodes[1].validateaddress(address3)
assert_equal(address_info['iswatchonly'], False)
assert_equal(address_info['ismine'], True)
#Remove transactions
assert_raises_jsonrpc(-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1)
balance1 = self.nodes[1].getbalance("*", 0, True)
assert_equal(balance1, Decimal('0.075'))
self.nodes[1].removeprunedfunds(txnid2)
balance2 = self.nodes[1].getbalance("*", 0, True)
assert_equal(balance2, Decimal('0.025'))
self.nodes[1].removeprunedfunds(txnid3)
balance3 = self.nodes[1].getbalance("*", 0, True)
assert_equal(balance3, Decimal('0.0'))
if __name__ == '__main__':
ImportPrunedFundsTest().main()