mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
This is part of the "UTXO Set Statistics" project in Core, which aims to make things like "checking coin supply" faster. This stuff, and related things in coinstats.cpp, have always been broken for Elements in the sense that we consider only explicit outputs and we ignore assets (so everything just gets added together to get a meaningless total). It probably wouldn't be too hard to restrict this to only consider policyAsset, but it's out of scope for a rebase IMO. Also, I think this situation is fine .. I don't understand the motivation for this or why Core is merging this when they refuse to merge an address index .. but I guess we'll see if there are users who care about this data and who care about it being meaningful on Elements. Also, apologies for the big diff -- there were some mechanical changes to deal with CT amounts, but most of the changes related to the difference in how fees are accounted for. While I'm not thrilled with this PR, its functional test is really good! So I think what I eventually came up with is internally consistent.
386 lines
11 KiB
Text
386 lines
11 KiB
Text
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
if ENABLE_FUZZ_BINARY
|
|
noinst_PROGRAMS += test/fuzz/fuzz
|
|
endif
|
|
|
|
if !ENABLE_FUZZ
|
|
bin_PROGRAMS += test/test_bitcoin
|
|
endif
|
|
|
|
TEST_SRCDIR = test
|
|
TEST_BINARY=test/test_bitcoin$(EXEEXT)
|
|
FUZZ_BINARY=test/fuzz/fuzz$(EXEEXT)
|
|
|
|
JSON_TEST_FILES = \
|
|
test/data/script_tests.json \
|
|
test/data/base58_encode_decode.json \
|
|
test/data/blockfilters.json \
|
|
test/data/key_io_valid.json \
|
|
test/data/key_io_invalid.json \
|
|
test/data/script_tests.json \
|
|
test/data/sighash.json \
|
|
test/data/tx_invalid.json \
|
|
test/data/tx_valid.json
|
|
|
|
RAW_TEST_FILES = \
|
|
test/data/asmap.raw
|
|
|
|
GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h)
|
|
|
|
BITCOIN_TEST_SUITE = \
|
|
test/main.cpp \
|
|
$(TEST_UTIL_H)
|
|
|
|
FUZZ_SUITE_LD_COMMON = \
|
|
$(LIBBITCOIN_SERVER) \
|
|
$(LIBBITCOIN_COMMON) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBTEST_UTIL) \
|
|
$(LIBTEST_FUZZ) \
|
|
$(LIBBITCOIN_CONSENSUS) \
|
|
$(LIBBITCOIN_CRYPTO) \
|
|
$(LIBBITCOIN_CLI) \
|
|
$(LIBUNIVALUE) \
|
|
$(LIBLEVELDB) \
|
|
$(LIBLEVELDB_SSE42) \
|
|
$(BOOST_LIBS) \
|
|
$(LIBMEMENV) \
|
|
$(LIBSECP256K1) \
|
|
$(EVENT_LIBS) \
|
|
$(EVENT_PTHREADS_LIBS)
|
|
|
|
if USE_UPNP
|
|
FUZZ_SUITE_LD_COMMON += $(MINIUPNPC_LIBS)
|
|
endif
|
|
|
|
if USE_NATPMP
|
|
FUZZ_SUITE_LD_COMMON += $(NATPMP_LIBS)
|
|
endif
|
|
|
|
# test_bitcoin binary #
|
|
BITCOIN_TESTS =\
|
|
test/pegin_witness_tests.cpp \
|
|
test/arith_uint256_tests.cpp \
|
|
test/scriptnum10.h \
|
|
test/addrman_tests.cpp \
|
|
test/amount_tests.cpp \
|
|
test/allocator_tests.cpp \
|
|
test/base32_tests.cpp \
|
|
test/base58_tests.cpp \
|
|
test/base64_tests.cpp \
|
|
test/bech32_tests.cpp \
|
|
test/blech32_tests.cpp \
|
|
test/bip32_tests.cpp \
|
|
test/blockchain_tests.cpp \
|
|
test/blockencodings_tests.cpp \
|
|
test/blockfilter_tests.cpp \
|
|
test/blockfilter_index_tests.cpp \
|
|
test/bloom_tests.cpp \
|
|
test/bswap_tests.cpp \
|
|
test/checkqueue_tests.cpp \
|
|
test/coins_tests.cpp \
|
|
test/coinstatsindex_tests.cpp \
|
|
test/compilerbug_tests.cpp \
|
|
test/compress_tests.cpp \
|
|
test/crypto_tests.cpp \
|
|
test/cuckoocache_tests.cpp \
|
|
test/denialofservice_tests.cpp \
|
|
test/descriptor_tests.cpp \
|
|
test/flatfile_tests.cpp \
|
|
test/fs_tests.cpp \
|
|
test/getarg_tests.cpp \
|
|
test/hash_tests.cpp \
|
|
test/i2p_tests.cpp \
|
|
test/interfaces_tests.cpp \
|
|
test/key_io_tests.cpp \
|
|
test/key_tests.cpp \
|
|
test/logging_tests.cpp \
|
|
test/dbwrapper_tests.cpp \
|
|
test/validation_tests.cpp \
|
|
test/mempool_tests.cpp \
|
|
test/merkle_tests.cpp \
|
|
test/merkleblock_tests.cpp \
|
|
test/miner_tests.cpp \
|
|
test/multisig_tests.cpp \
|
|
test/net_peer_eviction_tests.cpp \
|
|
test/net_tests.cpp \
|
|
test/netbase_tests.cpp \
|
|
test/pmt_tests.cpp \
|
|
test/policy_fee_tests.cpp \
|
|
test/policyestimator_tests.cpp \
|
|
test/pow_tests.cpp \
|
|
test/prevector_tests.cpp \
|
|
test/raii_event_tests.cpp \
|
|
test/random_tests.cpp \
|
|
test/reverselock_tests.cpp \
|
|
test/rpc_tests.cpp \
|
|
test/sanity_tests.cpp \
|
|
test/scheduler_tests.cpp \
|
|
test/script_p2sh_tests.cpp \
|
|
test/script_tests.cpp \
|
|
test/script_standard_tests.cpp \
|
|
test/scriptnum_tests.cpp \
|
|
test/serialize_tests.cpp \
|
|
test/settings_tests.cpp \
|
|
test/sighash_tests.cpp \
|
|
test/sigopcount_tests.cpp \
|
|
test/skiplist_tests.cpp \
|
|
test/sock_tests.cpp \
|
|
test/streams_tests.cpp \
|
|
test/sync_tests.cpp \
|
|
test/system_tests.cpp \
|
|
test/util_threadnames_tests.cpp \
|
|
test/timedata_tests.cpp \
|
|
test/torcontrol_tests.cpp \
|
|
test/transaction_tests.cpp \
|
|
test/txindex_tests.cpp \
|
|
test/txrequest_tests.cpp \
|
|
test/txvalidation_tests.cpp \
|
|
test/txvalidationcache_tests.cpp \
|
|
test/uint256_tests.cpp \
|
|
test/util_tests.cpp \
|
|
test/validation_block_tests.cpp \
|
|
test/validation_chainstate_tests.cpp \
|
|
test/validation_chainstatemanager_tests.cpp \
|
|
test/validation_flush_tests.cpp \
|
|
test/validationinterface_tests.cpp \
|
|
test/versionbits_tests.cpp \
|
|
test/pegin_spent_tests.cpp \
|
|
test/dynafed_tests.cpp \
|
|
test/blind_tests.cpp
|
|
# ELEMENTS (last 3 tests)
|
|
|
|
if ENABLE_WALLET
|
|
BITCOIN_TESTS += \
|
|
wallet/test/wallet_tests.cpp \
|
|
wallet/test/walletdb_tests.cpp \
|
|
wallet/test/wallet_crypto_tests.cpp \
|
|
wallet/test/coinselector_tests.cpp \
|
|
wallet/test/init_tests.cpp \
|
|
wallet/test/ismine_tests.cpp \
|
|
wallet/test/scriptpubkeyman_tests.cpp
|
|
# ELEMENTS: disable PSBT test
|
|
# wallet/test/psbt_wallet_tests.cpp
|
|
|
|
FUZZ_SUITE_LD_COMMON +=\
|
|
$(LIBBITCOIN_WALLET) \
|
|
$(SQLITE_LIBS) \
|
|
$(BDB_LIBS)
|
|
|
|
if USE_BDB
|
|
BITCOIN_TESTS += wallet/test/db_tests.cpp
|
|
endif
|
|
|
|
|
|
BITCOIN_TEST_SUITE += \
|
|
wallet/test/wallet_test_fixture.cpp \
|
|
wallet/test/wallet_test_fixture.h \
|
|
wallet/test/init_test_fixture.cpp \
|
|
wallet/test/init_test_fixture.h
|
|
endif
|
|
|
|
test_test_bitcoin_SOURCES = $(BITCOIN_TEST_SUITE) $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)
|
|
test_test_bitcoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(TESTDEFS) $(EVENT_CFLAGS)
|
|
test_test_bitcoin_LDADD = $(LIBTEST_UTIL)
|
|
if ENABLE_WALLET
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET)
|
|
endif
|
|
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) \
|
|
$(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS)
|
|
test_test_bitcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
|
|
|
test_test_bitcoin_LDADD += $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(SQLITE_LIBS)
|
|
test_test_bitcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) -static
|
|
|
|
if ENABLE_ZMQ
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
|
|
FUZZ_SUITE_LD_COMMON += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
|
|
endif
|
|
|
|
FUZZ_SUITE_LDFLAGS_COMMON = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS)
|
|
|
|
if ENABLE_FUZZ_BINARY
|
|
test_fuzz_fuzz_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
|
test_fuzz_fuzz_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
|
test_fuzz_fuzz_LDADD = $(FUZZ_SUITE_LD_COMMON)
|
|
test_fuzz_fuzz_LDFLAGS = $(FUZZ_SUITE_LDFLAGS_COMMON)
|
|
test_fuzz_fuzz_SOURCES = \
|
|
test/fuzz/addition_overflow.cpp \
|
|
test/fuzz/addrdb.cpp \
|
|
test/fuzz/addrman.cpp \
|
|
test/fuzz/asmap.cpp \
|
|
test/fuzz/asmap_direct.cpp \
|
|
test/fuzz/autofile.cpp \
|
|
test/fuzz/banman.cpp \
|
|
test/fuzz/base_encode_decode.cpp \
|
|
test/fuzz/bech32.cpp \
|
|
test/fuzz/block.cpp \
|
|
test/fuzz/block_header.cpp \
|
|
test/fuzz/blockfilter.cpp \
|
|
test/fuzz/bloom_filter.cpp \
|
|
test/fuzz/buffered_file.cpp \
|
|
test/fuzz/chain.cpp \
|
|
test/fuzz/checkqueue.cpp \
|
|
test/fuzz/coins_view.cpp \
|
|
test/fuzz/connman.cpp \
|
|
test/fuzz/crypto.cpp \
|
|
test/fuzz/crypto_aes256.cpp \
|
|
test/fuzz/crypto_aes256cbc.cpp \
|
|
test/fuzz/crypto_chacha20.cpp \
|
|
test/fuzz/crypto_chacha20_poly1305_aead.cpp \
|
|
test/fuzz/crypto_common.cpp \
|
|
test/fuzz/crypto_hkdf_hmac_sha256_l32.cpp \
|
|
test/fuzz/crypto_poly1305.cpp \
|
|
test/fuzz/cuckoocache.cpp \
|
|
test/fuzz/data_stream.cpp \
|
|
test/fuzz/decode_tx.cpp \
|
|
test/fuzz/descriptor_parse.cpp \
|
|
test/fuzz/deserialize.cpp \
|
|
test/fuzz/eval_script.cpp \
|
|
test/fuzz/fee_rate.cpp \
|
|
test/fuzz/fees.cpp \
|
|
test/fuzz/flatfile.cpp \
|
|
test/fuzz/float.cpp \
|
|
test/fuzz/golomb_rice.cpp \
|
|
test/fuzz/hex.cpp \
|
|
test/fuzz/http_request.cpp \
|
|
test/fuzz/i2p.cpp \
|
|
test/fuzz/integer.cpp \
|
|
test/fuzz/key.cpp \
|
|
test/fuzz/key_io.cpp \
|
|
test/fuzz/kitchen_sink.cpp \
|
|
test/fuzz/load_external_block_file.cpp \
|
|
test/fuzz/locale.cpp \
|
|
test/fuzz/merkleblock.cpp \
|
|
test/fuzz/message.cpp \
|
|
test/fuzz/muhash.cpp \
|
|
test/fuzz/multiplication_overflow.cpp \
|
|
test/fuzz/net.cpp \
|
|
test/fuzz/net_permissions.cpp \
|
|
test/fuzz/netaddress.cpp \
|
|
test/fuzz/netbase_dns_lookup.cpp \
|
|
test/fuzz/node_eviction.cpp \
|
|
test/fuzz/p2p_transport_deserializer.cpp \
|
|
test/fuzz/parse_hd_keypath.cpp \
|
|
test/fuzz/parse_iso8601.cpp \
|
|
test/fuzz/parse_numbers.cpp \
|
|
test/fuzz/parse_script.cpp \
|
|
test/fuzz/parse_univalue.cpp \
|
|
test/fuzz/policy_estimator.cpp \
|
|
test/fuzz/policy_estimator_io.cpp \
|
|
test/fuzz/pow.cpp \
|
|
test/fuzz/prevector.cpp \
|
|
test/fuzz/primitives_transaction.cpp \
|
|
test/fuzz/process_message.cpp \
|
|
test/fuzz/process_messages.cpp \
|
|
test/fuzz/protocol.cpp \
|
|
test/fuzz/psbt.cpp \
|
|
test/fuzz/random.cpp \
|
|
test/fuzz/rbf.cpp \
|
|
test/fuzz/rolling_bloom_filter.cpp \
|
|
test/fuzz/rpc.cpp \
|
|
test/fuzz/script.cpp \
|
|
test/fuzz/script_assets_test_minimizer.cpp \
|
|
test/fuzz/script_bitcoin_consensus.cpp \
|
|
test/fuzz/script_descriptor_cache.cpp \
|
|
test/fuzz/script_flags.cpp \
|
|
test/fuzz/script_interpreter.cpp \
|
|
test/fuzz/script_ops.cpp \
|
|
test/fuzz/script_sigcache.cpp \
|
|
test/fuzz/script_sign.cpp \
|
|
test/fuzz/scriptnum_ops.cpp \
|
|
test/fuzz/secp256k1_ec_seckey_import_export_der.cpp \
|
|
test/fuzz/secp256k1_ecdsa_signature_parse_der_lax.cpp \
|
|
test/fuzz/signature_checker.cpp \
|
|
test/fuzz/signet.cpp \
|
|
test/fuzz/socks5.cpp \
|
|
test/fuzz/span.cpp \
|
|
test/fuzz/spanparsing.cpp \
|
|
test/fuzz/string.cpp \
|
|
test/fuzz/strprintf.cpp \
|
|
test/fuzz/system.cpp \
|
|
test/fuzz/timedata.cpp \
|
|
test/fuzz/torcontrol.cpp \
|
|
test/fuzz/transaction.cpp \
|
|
test/fuzz/tx_in.cpp \
|
|
test/fuzz/tx_out.cpp \
|
|
test/fuzz/tx_pool.cpp \
|
|
test/fuzz/txrequest.cpp \
|
|
test/fuzz/validation_load_mempool.cpp \
|
|
test/fuzz/versionbits.cpp
|
|
endif # ENABLE_FUZZ_BINARY
|
|
|
|
nodist_test_test_bitcoin_SOURCES = $(GENERATED_TEST_FILES)
|
|
|
|
$(BITCOIN_TESTS): $(GENERATED_TEST_FILES)
|
|
|
|
CLEAN_BITCOIN_TEST = test/*.gcda test/*.gcno test/fuzz/*.gcda test/fuzz/*.gcno test/util/*.gcda test/util/*.gcno $(GENERATED_TEST_FILES) $(BITCOIN_TESTS:=.log)
|
|
|
|
CLEANFILES += $(CLEAN_BITCOIN_TEST)
|
|
|
|
if TARGET_WINDOWS
|
|
bitcoin_test: $(TEST_BINARY)
|
|
else
|
|
if ENABLE_BENCH
|
|
bitcoin_test: $(TEST_BINARY) $(BENCH_BINARY)
|
|
else
|
|
bitcoin_test: $(TEST_BINARY)
|
|
endif
|
|
endif
|
|
|
|
bitcoin_test_check: $(TEST_BINARY) FORCE
|
|
$(MAKE) check-TESTS TESTS=$^
|
|
|
|
bitcoin_test_clean : FORCE
|
|
rm -f $(CLEAN_BITCOIN_TEST) $(test_test_bitcoin_OBJECTS) $(TEST_BINARY)
|
|
|
|
check-local: $(BITCOIN_TESTS:.cpp=.cpp.test)
|
|
if BUILD_BITCOIN_TX
|
|
@echo "Running test/util/bitcoin-util-test.py..."
|
|
$(PYTHON) $(top_builddir)/test/util/bitcoin-util-test.py
|
|
endif
|
|
@echo "Running test/util/rpcauth-test.py..."
|
|
$(PYTHON) $(top_builddir)/test/util/rpcauth-test.py
|
|
if TARGET_WINDOWS
|
|
else
|
|
if ENABLE_BENCH
|
|
@echo "Running bench/bench_bitcoin ..."
|
|
$(BENCH_BINARY) > /dev/null
|
|
endif
|
|
endif
|
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
|
|
if EMBEDDED_UNIVALUE
|
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check
|
|
endif
|
|
|
|
if ENABLE_FUZZ_LINK_ALL
|
|
all-local: $(FUZZ_BINARY)
|
|
bash ./test/fuzz/danger_link_all.sh
|
|
endif
|
|
|
|
%.cpp.test: %.cpp
|
|
@echo Running tests: `cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1` from $<
|
|
$(AM_V_at)$(TEST_BINARY) --catch_system_errors=no -l test_suite -t "`cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1`" -- DEBUG_LOG_OUT > $<.log 2>&1 || (cat $<.log && false)
|
|
|
|
%.json.h: %.json
|
|
@$(MKDIR_P) $(@D)
|
|
@{ \
|
|
echo "namespace json_tests{" && \
|
|
echo "static unsigned const char $(*F)[] = {" && \
|
|
$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \
|
|
echo "};};"; \
|
|
} > "$@.new" && mv -f "$@.new" "$@"
|
|
@echo "Generated $@"
|
|
|
|
%.raw.h: %.raw
|
|
@$(MKDIR_P) $(@D)
|
|
@{ \
|
|
echo "static unsigned const char $(*F)_raw[] = {" && \
|
|
$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \
|
|
echo "};"; \
|
|
} > "$@.new" && mv -f "$@.new" "$@"
|
|
@echo "Generated $@"
|