aboutsummaryrefslogtreecommitdiff
path: root/test/functional
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2022-03-25 16:52:55 +0100
committerMarcoFalke <falke.marco@gmail.com>2022-03-25 16:53:00 +0100
commit9745e180515077f10499f425f9ce49a5c02231ef (patch)
tree2a8028780e4f4b580b0a8111071b085904134df4 /test/functional
parent7878c8655c97dc97bf4dd4b7a9bd79e991f4b68b (diff)
parent0000ff0d6b2442706a588fd906ebf1adf8ff8226 (diff)
Merge bitcoin/bitcoin#24670: test: move-only: Move all generate* tests to a single file
0000ff0d6b2442706a588fd906ebf1adf8ff8226 test: move-only: Move all generate* tests to a single file (MarcoFalke) Pull request description: Seems a bit overkill to spread tests for the `generate*` methods over several files. Combining them into a single file has also a nice side-effect of requiring less node (re)starts, which are expensive in valgrind. ACKs for top commit: glozow: utACK 0000ff0d6b2442706a588fd906ebf1adf8ff8226 Tree-SHA512: 8269eb05649a871011bbfbd1838d0f7d1dac4a35b3b198fc43fe85131fda8a53803b75da78cbf422eabf086006dee4421e622fbe706f6781a3848b989024001b
Diffstat (limited to 'test/functional')
-rwxr-xr-xtest/functional/rpc_generate.py91
-rwxr-xr-xtest/functional/rpc_generateblock.py100
-rwxr-xr-xtest/functional/test_runner.py1
-rwxr-xr-xtest/functional/wallet_disable.py6
4 files changed, 91 insertions, 107 deletions
diff --git a/test/functional/rpc_generate.py b/test/functional/rpc_generate.py
index 47d7814da3..2b1dd20ea1 100755
--- a/test/functional/rpc_generate.py
+++ b/test/functional/rpc_generate.py
@@ -2,9 +2,10 @@
# Copyright (c) 2020-2021 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 generate RPC."""
+"""Test generate* RPCs."""
from test_framework.test_framework import BitcoinTestFramework
+from test_framework.wallet import MiniWallet
from test_framework.util import (
assert_equal,
assert_raises_rpc_error,
@@ -16,6 +17,94 @@ class RPCGenerateTest(BitcoinTestFramework):
self.num_nodes = 1
def run_test(self):
+ self.test_generatetoaddress()
+ self.test_generate()
+ self.test_generateblock()
+
+ def test_generatetoaddress(self):
+ self.generatetoaddress(self.nodes[0], 1, 'mneYUmWYsuk7kySiURxCi3AGxrAqZxLgPZ')
+ assert_raises_rpc_error(-5, "Invalid address", self.generatetoaddress, self.nodes[0], 1, '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
+
+ def test_generateblock(self):
+ node = self.nodes[0]
+ miniwallet = MiniWallet(node)
+ miniwallet.rescan_utxos()
+
+ self.log.info('Generate an empty block to address')
+ address = miniwallet.get_address()
+ hash = self.generateblock(node, output=address, transactions=[])['hash']
+ block = node.getblock(blockhash=hash, verbose=2)
+ assert_equal(len(block['tx']), 1)
+ assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], address)
+
+ self.log.info('Generate an empty block to a descriptor')
+ hash = self.generateblock(node, 'addr(' + address + ')', [])['hash']
+ block = node.getblock(blockhash=hash, verbosity=2)
+ assert_equal(len(block['tx']), 1)
+ assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], address)
+
+ self.log.info('Generate an empty block to a combo descriptor with compressed pubkey')
+ combo_key = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'
+ combo_address = 'bcrt1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080'
+ hash = self.generateblock(node, 'combo(' + combo_key + ')', [])['hash']
+ block = node.getblock(hash, 2)
+ assert_equal(len(block['tx']), 1)
+ assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], combo_address)
+
+ self.log.info('Generate an empty block to a combo descriptor with uncompressed pubkey')
+ combo_key = '0408ef68c46d20596cc3f6ddf7c8794f71913add807f1dc55949fa805d764d191c0b7ce6894c126fce0babc6663042f3dde9b0cf76467ea315514e5a6731149c67'
+ combo_address = 'mkc9STceoCcjoXEXe6cm66iJbmjM6zR9B2'
+ hash = self.generateblock(node, 'combo(' + combo_key + ')', [])['hash']
+ block = node.getblock(hash, 2)
+ assert_equal(len(block['tx']), 1)
+ assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], combo_address)
+
+ # Generate some extra mempool transactions to verify they don't get mined
+ for _ in range(10):
+ miniwallet.send_self_transfer(from_node=node)
+
+ self.log.info('Generate block with txid')
+ txid = miniwallet.send_self_transfer(from_node=node)['txid']
+ hash = self.generateblock(node, address, [txid])['hash']
+ block = node.getblock(hash, 1)
+ assert_equal(len(block['tx']), 2)
+ assert_equal(block['tx'][1], txid)
+
+ self.log.info('Generate block with raw tx')
+ rawtx = miniwallet.create_self_transfer()['hex']
+ hash = self.generateblock(node, address, [rawtx])['hash']
+
+ block = node.getblock(hash, 1)
+ assert_equal(len(block['tx']), 2)
+ txid = block['tx'][1]
+ assert_equal(node.getrawtransaction(txid=txid, verbose=False, blockhash=hash), rawtx)
+
+ self.log.info('Fail to generate block with out of order txs')
+ txid1 = miniwallet.send_self_transfer(from_node=node)['txid']
+ utxo1 = miniwallet.get_utxo(txid=txid1)
+ rawtx2 = miniwallet.create_self_transfer(utxo_to_spend=utxo1)['hex']
+ assert_raises_rpc_error(-25, 'TestBlockValidity failed: bad-txns-inputs-missingorspent', self.generateblock, node, address, [rawtx2, txid1])
+
+ self.log.info('Fail to generate block with txid not in mempool')
+ missing_txid = '0000000000000000000000000000000000000000000000000000000000000000'
+ assert_raises_rpc_error(-5, 'Transaction ' + missing_txid + ' not in mempool.', self.generateblock, node, address, [missing_txid])
+
+ self.log.info('Fail to generate block with invalid raw tx')
+ invalid_raw_tx = '0000'
+ assert_raises_rpc_error(-22, 'Transaction decode failed for ' + invalid_raw_tx, self.generateblock, node, address, [invalid_raw_tx])
+
+ self.log.info('Fail to generate block with invalid address/descriptor')
+ assert_raises_rpc_error(-5, 'Invalid address or descriptor', self.generateblock, node, '1234', [])
+
+ self.log.info('Fail to generate block with a ranged descriptor')
+ ranged_descriptor = 'pkh(tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp/0/*)'
+ assert_raises_rpc_error(-8, 'Ranged descriptor not accepted. Maybe pass through deriveaddresses first?', self.generateblock, node, ranged_descriptor, [])
+
+ self.log.info('Fail to generate block with a descriptor missing a private key')
+ child_descriptor = 'pkh(tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp/0\'/0)'
+ assert_raises_rpc_error(-5, 'Cannot derive script without private keys', self.generateblock, node, child_descriptor, [])
+
+ def test_generate(self):
message = (
"generate\n\n"
"has been replaced by the -generate "
diff --git a/test/functional/rpc_generateblock.py b/test/functional/rpc_generateblock.py
deleted file mode 100755
index 7eeb745817..0000000000
--- a/test/functional/rpc_generateblock.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2020-2021 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 generateblock rpc.
-'''
-
-from test_framework.test_framework import BitcoinTestFramework
-from test_framework.wallet import MiniWallet
-from test_framework.util import (
- assert_equal,
- assert_raises_rpc_error,
-)
-
-
-class GenerateBlockTest(BitcoinTestFramework):
- def set_test_params(self):
- self.num_nodes = 1
-
- def run_test(self):
- node = self.nodes[0]
- miniwallet = MiniWallet(node)
- miniwallet.rescan_utxos()
-
- self.log.info('Generate an empty block to address')
- address = miniwallet.get_address()
- hash = self.generateblock(node, output=address, transactions=[])['hash']
- block = node.getblock(blockhash=hash, verbose=2)
- assert_equal(len(block['tx']), 1)
- assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], address)
-
- self.log.info('Generate an empty block to a descriptor')
- hash = self.generateblock(node, 'addr(' + address + ')', [])['hash']
- block = node.getblock(blockhash=hash, verbosity=2)
- assert_equal(len(block['tx']), 1)
- assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], address)
-
- self.log.info('Generate an empty block to a combo descriptor with compressed pubkey')
- combo_key = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'
- combo_address = 'bcrt1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080'
- hash = self.generateblock(node, 'combo(' + combo_key + ')', [])['hash']
- block = node.getblock(hash, 2)
- assert_equal(len(block['tx']), 1)
- assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], combo_address)
-
- self.log.info('Generate an empty block to a combo descriptor with uncompressed pubkey')
- combo_key = '0408ef68c46d20596cc3f6ddf7c8794f71913add807f1dc55949fa805d764d191c0b7ce6894c126fce0babc6663042f3dde9b0cf76467ea315514e5a6731149c67'
- combo_address = 'mkc9STceoCcjoXEXe6cm66iJbmjM6zR9B2'
- hash = self.generateblock(node, 'combo(' + combo_key + ')', [])['hash']
- block = node.getblock(hash, 2)
- assert_equal(len(block['tx']), 1)
- assert_equal(block['tx'][0]['vout'][0]['scriptPubKey']['address'], combo_address)
-
- # Generate some extra mempool transactions to verify they don't get mined
- for _ in range(10):
- miniwallet.send_self_transfer(from_node=node)
-
- self.log.info('Generate block with txid')
- txid = miniwallet.send_self_transfer(from_node=node)['txid']
- hash = self.generateblock(node, address, [txid])['hash']
- block = node.getblock(hash, 1)
- assert_equal(len(block['tx']), 2)
- assert_equal(block['tx'][1], txid)
-
- self.log.info('Generate block with raw tx')
- rawtx = miniwallet.create_self_transfer()['hex']
- hash = self.generateblock(node, address, [rawtx])['hash']
-
- block = node.getblock(hash, 1)
- assert_equal(len(block['tx']), 2)
- txid = block['tx'][1]
- assert_equal(node.getrawtransaction(txid=txid, verbose=False, blockhash=hash), rawtx)
-
- self.log.info('Fail to generate block with out of order txs')
- txid1 = miniwallet.send_self_transfer(from_node=node)['txid']
- utxo1 = miniwallet.get_utxo(txid=txid1)
- rawtx2 = miniwallet.create_self_transfer(utxo_to_spend=utxo1)['hex']
- assert_raises_rpc_error(-25, 'TestBlockValidity failed: bad-txns-inputs-missingorspent', self.generateblock, node, address, [rawtx2, txid1])
-
- self.log.info('Fail to generate block with txid not in mempool')
- missing_txid = '0000000000000000000000000000000000000000000000000000000000000000'
- assert_raises_rpc_error(-5, 'Transaction ' + missing_txid + ' not in mempool.', self.generateblock, node, address, [missing_txid])
-
- self.log.info('Fail to generate block with invalid raw tx')
- invalid_raw_tx = '0000'
- assert_raises_rpc_error(-22, 'Transaction decode failed for ' + invalid_raw_tx, self.generateblock, node, address, [invalid_raw_tx])
-
- self.log.info('Fail to generate block with invalid address/descriptor')
- assert_raises_rpc_error(-5, 'Invalid address or descriptor', self.generateblock, node, '1234', [])
-
- self.log.info('Fail to generate block with a ranged descriptor')
- ranged_descriptor = 'pkh(tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp/0/*)'
- assert_raises_rpc_error(-8, 'Ranged descriptor not accepted. Maybe pass through deriveaddresses first?', self.generateblock, node, ranged_descriptor, [])
-
- self.log.info('Fail to generate block with a descriptor missing a private key')
- child_descriptor = 'pkh(tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp/0\'/0)'
- assert_raises_rpc_error(-5, 'Cannot derive script without private keys', self.generateblock, node, child_descriptor, [])
-
-if __name__ == '__main__':
- GenerateBlockTest().main()
diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py
index 306c8e7ff0..a088cbd5b9 100755
--- a/test/functional/test_runner.py
+++ b/test/functional/test_runner.py
@@ -235,7 +235,6 @@ BASE_SCRIPTS = [
'p2p_eviction.py',
'wallet_signmessagewithaddress.py',
'rpc_signmessagewithprivkey.py',
- 'rpc_generateblock.py',
'rpc_generate.py',
'wallet_balance.py --legacy-wallet',
'wallet_balance.py --descriptors',
diff --git a/test/functional/wallet_disable.py b/test/functional/wallet_disable.py
index 2c7996ca6b..74cddf2738 100755
--- a/test/functional/wallet_disable.py
+++ b/test/functional/wallet_disable.py
@@ -26,10 +26,6 @@ class DisableWalletTest (BitcoinTestFramework):
x = self.nodes[0].validateaddress('mneYUmWYsuk7kySiURxCi3AGxrAqZxLgPZ')
assert x['isvalid'] == True
- # Checking mining to an address without a wallet. Generating to a valid address should succeed
- # but generating to an invalid address will fail.
- self.generatetoaddress(self.nodes[0], 1, 'mneYUmWYsuk7kySiURxCi3AGxrAqZxLgPZ')
- assert_raises_rpc_error(-5, "Invalid address", self.generatetoaddress, self.nodes[0], 1, '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
if __name__ == '__main__':
- DisableWalletTest ().main ()
+ DisableWalletTest().main()