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:
    reACK 723440c5b8
  maflcko:
    lgtm ACK 723440c5b8
  brunoerg:
    code review ACK 723440c5b8

Tree-SHA512: 3384578909d2e7548cef302c5b8a9fed5b82dfc942892503ad4a05e73f5cceafad1eab3af9a27e54aef3db7631f8935298d6b882c70d2f02a9a75b8e3c209b6c
This commit is contained in:
merge-script
2025-02-05 13:30:51 +00:00
5 changed files with 33 additions and 4 deletions

View File

@@ -9,6 +9,7 @@ Test the following RPCs:
- getdeploymentinfo
- getchaintxstats
- gettxoutsetinfo
- gettxout
- getblockheader
- getdifficulty
- getnetworkhashps
@@ -90,6 +91,7 @@ class BlockchainTest(BitcoinTestFramework):
self._test_getblockchaininfo()
self._test_getchaintxstats()
self._test_gettxoutsetinfo()
self._test_gettxout()
self._test_getblockheader()
self._test_getdifficulty()
self._test_getnetworkhashps()
@@ -400,6 +402,33 @@ class BlockchainTest(BitcoinTestFramework):
# Unknown hash_type raises an error
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):
self.log.info("Test getblockheader")
node = self.nodes[0]