aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2019-01-04 13:52:24 +0100
committerMarcoFalke <falke.marco@gmail.com>2019-01-05 14:51:25 +0100
commitfac4e731a8e5f140dc3bbca4c9af6e23fc1cd107 (patch)
tree1d3ce2c7cac48d7a3e0e740da138b0703d4ffdff
parentf7e182a973ed66b4c11dc6239e57016655503b4c (diff)
test: Run invalid_txs.InputMissing test in feature_block
-rw-r--r--src/wallet/test/wallet_tests.cpp4
-rwxr-xr-xtest/functional/feature_block.py25
2 files changed, 19 insertions, 10 deletions
diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp
index 1ed1926af2..0db22cf6fe 100644
--- a/src/wallet/test/wallet_tests.cpp
+++ b/src/wallet/test/wallet_tests.cpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2012-2018 The Bitcoin Core developers
+// Copyright (c) 2012-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.
@@ -47,7 +47,7 @@ BOOST_FIXTURE_TEST_CASE(scan_for_wallet_transactions, TestChain100Setup)
auto locked_chain = chain->lock();
- // Verify ScanForWalletTransactions accomodates a null start block.
+ // Verify ScanForWalletTransactions accommodates a null start block.
{
CWallet wallet(*chain, WalletLocation(), WalletDatabase::CreateDummy());
AddKey(wallet, coinbaseKey);
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(