aboutsummaryrefslogtreecommitdiff
path: root/src/test/transaction_tests.cpp
diff options
context:
space:
mode:
authorgzhao408 <gzhao408@berkeley.edu>2021-01-26 14:10:18 -0800
committergzhao408 <gzhao408@berkeley.edu>2021-02-02 09:17:58 -0800
commitb10ce9aa48c8937cb91fca05e29c68098a364d93 (patch)
tree9b17a91f273ecdec5531a04258a160d980938975 /src/test/transaction_tests.cpp
parenta260c22cad0672dda11f42f649ebdc7cfa53b16a (diff)
downloadbitcoin-b10ce9aa48c8937cb91fca05e29c68098a364d93.tar.xz
[test] check verification flags are minimal/maximal
Co-authored-by: Johnson Lau <jl2012@xbt.hk>
Diffstat (limited to 'src/test/transaction_tests.cpp')
-rw-r--r--src/test/transaction_tests.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp
index 0102ec627f..e2a99874e8 100644
--- a/src/test/transaction_tests.cpp
+++ b/src/test/transaction_tests.cpp
@@ -230,6 +230,12 @@ BOOST_AUTO_TEST_CASE(tx_valid)
if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, ~verify_flags, txdata, strTest, /* expect_valid */ true)) {
BOOST_ERROR("Tx unexpectedly failed: " << strTest);
}
+ // Check that flags are maximal: transaction should fail if any unset flags are set.
+ for (auto flags_excluding_one: ExcludeIndividualFlags(verify_flags)) {
+ if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, ~flags_excluding_one, txdata, strTest, /* expect_valid */ false)) {
+ BOOST_ERROR("Too many flags unset: " << strTest);
+ }
+ }
}
}
}
@@ -292,9 +298,16 @@ BOOST_AUTO_TEST_CASE(tx_invalid)
PrecomputedTransactionData txdata(tx);
unsigned int verify_flags = ParseScriptFlags(test[2].get_str());
+ // Not using FillFlags() in the main test, in order to detect invalid verifyFlags combination
if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, verify_flags, txdata, strTest, /* expect_valid */ false)) {
BOOST_ERROR("Tx unexpectedly passed: " << strTest);
}
+ // Check that flags are minimal: transaction should succeed if any set flags are unset.
+ for (auto flags_excluding_one: ExcludeIndividualFlags(verify_flags)) {
+ if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags_excluding_one, txdata, strTest, /* expect_valid */ true)) {
+ BOOST_ERROR("Too many flags set: " << strTest);
+ }
+ }
}
}
}