mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 23:07:59 +01:00
Merge bitcoin/bitcoin#30226: test: add validation for gettxout RPC response
723440c5b8
test framework, wallet: rename get_scriptPubKey method to get_output_script (Alfonso Roman Zubeldia)fa0232a3e0
test: add validation for gettxout RPC response (Alfonso Roman Zubeldia) Pull request description: Added a new test in `test/functional/rpc_blockchain.py` to validate the gettxout RPC response. This new test ensures all response elements are verified, including `bestblock`, `confirmations`, `value`, `coinbase`, and `scriptPubKey` details. Also renamed the method `get_scriptPubKey` from `test/functional/test_framework/wallet.py` to the modern name `get_output_script` as suggested by maflcko (https://github.com/bitcoin/bitcoin/pull/30226#discussion_r1925491846) ACKs for top commit: fjahr: reACK723440c5b8
maflcko: lgtm ACK723440c5b8
brunoerg: code review ACK723440c5b8
Tree-SHA512: 3384578909d2e7548cef302c5b8a9fed5b82dfc942892503ad4a05e73f5cceafad1eab3af9a27e54aef3db7631f8935298d6b882c70d2f02a9a75b8e3c209b6c
This commit is contained in:
commit
b9c241804c
5 changed files with 33 additions and 4 deletions
|
@ -151,7 +151,7 @@ class CoinStatsIndexTest(BitcoinTestFramework):
|
||||||
# Generate and send a normal tx with two outputs
|
# Generate and send a normal tx with two outputs
|
||||||
tx1 = self.wallet.send_to(
|
tx1 = self.wallet.send_to(
|
||||||
from_node=node,
|
from_node=node,
|
||||||
scriptPubKey=self.wallet.get_scriptPubKey(),
|
scriptPubKey=self.wallet.get_output_script(),
|
||||||
amount=21 * COIN,
|
amount=21 * COIN,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ class FeatureFrameworkMiniWalletTest(BitcoinTestFramework):
|
||||||
tag = ''.join(random.choice(string.ascii_letters) for _ in range(20))
|
tag = ''.join(random.choice(string.ascii_letters) for _ in range(20))
|
||||||
self.log.debug(f"-> ({i}) tag name: {tag}")
|
self.log.debug(f"-> ({i}) tag name: {tag}")
|
||||||
tagged_wallet = MiniWallet(node, tag_name=tag)
|
tagged_wallet = MiniWallet(node, tag_name=tag)
|
||||||
untagged_wallet.send_to(from_node=node, scriptPubKey=tagged_wallet.get_scriptPubKey(), amount=100000)
|
untagged_wallet.send_to(from_node=node, scriptPubKey=tagged_wallet.get_output_script(), amount=100000)
|
||||||
tagged_wallet.rescan_utxos()
|
tagged_wallet.rescan_utxos()
|
||||||
tagged_wallet.send_self_transfer(from_node=node)
|
tagged_wallet.send_self_transfer(from_node=node)
|
||||||
self.generate(node, 1) # clear mempool
|
self.generate(node, 1) # clear mempool
|
||||||
|
|
|
@ -85,7 +85,7 @@ class ReplaceByFeeTest(BitcoinTestFramework):
|
||||||
confirmed - txout created will be confirmed in the blockchain;
|
confirmed - txout created will be confirmed in the blockchain;
|
||||||
unconfirmed otherwise.
|
unconfirmed otherwise.
|
||||||
"""
|
"""
|
||||||
tx = self.wallet.send_to(from_node=node, scriptPubKey=scriptPubKey or self.wallet.get_scriptPubKey(), amount=amount)
|
tx = self.wallet.send_to(from_node=node, scriptPubKey=scriptPubKey or self.wallet.get_output_script(), amount=amount)
|
||||||
|
|
||||||
if confirmed:
|
if confirmed:
|
||||||
mempool_size = len(node.getrawmempool())
|
mempool_size = len(node.getrawmempool())
|
||||||
|
|
|
@ -9,6 +9,7 @@ Test the following RPCs:
|
||||||
- getdeploymentinfo
|
- getdeploymentinfo
|
||||||
- getchaintxstats
|
- getchaintxstats
|
||||||
- gettxoutsetinfo
|
- gettxoutsetinfo
|
||||||
|
- gettxout
|
||||||
- getblockheader
|
- getblockheader
|
||||||
- getdifficulty
|
- getdifficulty
|
||||||
- getnetworkhashps
|
- getnetworkhashps
|
||||||
|
@ -90,6 +91,7 @@ class BlockchainTest(BitcoinTestFramework):
|
||||||
self._test_getblockchaininfo()
|
self._test_getblockchaininfo()
|
||||||
self._test_getchaintxstats()
|
self._test_getchaintxstats()
|
||||||
self._test_gettxoutsetinfo()
|
self._test_gettxoutsetinfo()
|
||||||
|
self._test_gettxout()
|
||||||
self._test_getblockheader()
|
self._test_getblockheader()
|
||||||
self._test_getdifficulty()
|
self._test_getdifficulty()
|
||||||
self._test_getnetworkhashps()
|
self._test_getnetworkhashps()
|
||||||
|
@ -400,6 +402,33 @@ class BlockchainTest(BitcoinTestFramework):
|
||||||
# Unknown hash_type raises an error
|
# Unknown hash_type raises an error
|
||||||
assert_raises_rpc_error(-8, "'foo hash' is not a valid hash_type", node.gettxoutsetinfo, "foo hash")
|
assert_raises_rpc_error(-8, "'foo hash' is not a valid hash_type", node.gettxoutsetinfo, "foo hash")
|
||||||
|
|
||||||
|
def _test_gettxout(self):
|
||||||
|
self.log.info("Validating gettxout RPC response")
|
||||||
|
node = self.nodes[0]
|
||||||
|
|
||||||
|
# Get the best block hash and the block, which
|
||||||
|
# should only include the coinbase transaction.
|
||||||
|
best_block_hash = node.getbestblockhash()
|
||||||
|
block = node.getblock(best_block_hash)
|
||||||
|
assert_equal(block['nTx'], 1)
|
||||||
|
|
||||||
|
# Get the transaction ID of the coinbase tx and
|
||||||
|
# the transaction output.
|
||||||
|
txid = block['tx'][0]
|
||||||
|
txout = node.gettxout(txid, 0)
|
||||||
|
|
||||||
|
# Validate the gettxout response
|
||||||
|
assert_equal(txout['bestblock'], best_block_hash)
|
||||||
|
assert_equal(txout['confirmations'], 1)
|
||||||
|
assert_equal(txout['value'], 25)
|
||||||
|
assert_equal(txout['scriptPubKey']['address'], self.wallet.get_address())
|
||||||
|
assert_equal(txout['scriptPubKey']['hex'], self.wallet.get_output_script().hex())
|
||||||
|
decoded_script = node.decodescript(self.wallet.get_output_script().hex())
|
||||||
|
assert_equal(txout['scriptPubKey']['asm'], decoded_script['asm'])
|
||||||
|
assert_equal(txout['scriptPubKey']['desc'], decoded_script['desc'])
|
||||||
|
assert_equal(txout['scriptPubKey']['type'], decoded_script['type'])
|
||||||
|
assert_equal(txout['coinbase'], True)
|
||||||
|
|
||||||
def _test_getblockheader(self):
|
def _test_getblockheader(self):
|
||||||
self.log.info("Test getblockheader")
|
self.log.info("Test getblockheader")
|
||||||
node = self.nodes[0]
|
node = self.nodes[0]
|
||||||
|
|
|
@ -215,7 +215,7 @@ class MiniWallet:
|
||||||
self.rescan_utxos()
|
self.rescan_utxos()
|
||||||
return blocks
|
return blocks
|
||||||
|
|
||||||
def get_scriptPubKey(self):
|
def get_output_script(self):
|
||||||
return self._scriptPubKey
|
return self._scriptPubKey
|
||||||
|
|
||||||
def get_descriptor(self):
|
def get_descriptor(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue