From fac4e731a8e5f140dc3bbca4c9af6e23fc1cd107 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Fri, 4 Jan 2019 13:52:24 +0100 Subject: test: Run invalid_txs.InputMissing test in feature_block --- test/functional/feature_block.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'test/functional/feature_block.py') diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index 697a0b19ac..244cde044e 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright (c) 2015-2018 The Bitcoin Core developers +# Copyright (c) 2015-2019 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 block processing.""" @@ -137,12 +137,6 @@ class FullBlockTest(BitcoinTestFramework): for TxTemplate in invalid_txs.iter_all_templates(): template = TxTemplate(spend_tx=attempt_spend_tx) - # Something about the serialization code for missing inputs creates - # a different hash in the test client than on bitcoind, resulting - # in a mismatching merkle root during block validation. - # Skip until we figure out what's going on. - if TxTemplate == invalid_txs.InputMissing: - continue if template.valid_in_block: continue @@ -150,7 +144,22 @@ class FullBlockTest(BitcoinTestFramework): blockname = "for_invalid.%s" % TxTemplate.__name__ badblock = self.next_block(blockname) badtx = template.get_tx() - self.sign_tx(badtx, attempt_spend_tx) + if TxTemplate != invalid_txs.InputMissing: + self.sign_tx(badtx, attempt_spend_tx) + else: + # Segwit is active in regtest at this point, so to deserialize a + # transaction without any inputs correctly, we set the outputs + # to an empty list. This is a hack, as the serialization of an + # empty list of outputs is deserialized as flags==0 and thus + # deserialization of the outputs is skipped. + # A policy check requires "loose" txs to be of a minimum size, + # so vtx is not set to be empty in the TxTemplate class and we + # only apply the workaround where txs are not "loose", i.e. in + # blocks. + # + # The workaround has the purpose that both sides calculate + # the same tx hash in the merkle tree + badtx.vout = [] badtx.rehash() badblock = self.update_block(blockname, [badtx]) self.sync_blocks( -- cgit v1.2.3