From 6edbc9cebd6efd9e089d52dda68dd14452eabc2b Mon Sep 17 00:00:00 2001 From: PastaPastaPasta Date: Sun, 19 May 2019 15:20:34 -0500 Subject: [PATCH] Merge bitcoin#9956: Reorganise qa directory (#2912) * Merge #9956: Reorganise qa directory 63d66ba Move src/test/bitcoin-util-test.py to test/util/bitcoin-util-test.py (John Newbery) 5b0bff4 Rename --enable-extended-rpc-tests to --enable-extended-functional-tests (John Newbery) a9bd622 Rename test/pull-tester/rpc-tests.py to test/functional/test_runner.py (John Newbery) c28ee91 Rename rpc-tests directory to functional (John Newbery) 00902c4 Rename qa directory to test (John Newbery) Tree-SHA512: ee7125c0c647d81590177beef2c8852c4ef76fdcf888096d9d4d360562a01d8d3b453345c3040487b2a043935bd1e7e80018f34462d6e02262bedbe23edcc576 resolve build errors Signed-off-by: Pasta update test_runner.py in testintegrations.sh Signed-off-by: Pasta * moved dash specific tests Signed-off-by: Pasta * dashify README.md Signed-off-by: Pasta * removed autoix*.py Signed-off-by: Pasta * change back file perms * dedashify Signed-off-by: Pasta --- .gitignore | 6 +- Makefile.am | 64 ++++++++++-- README.md | 4 +- ci/test_integrationtests.sh | 2 +- configure.ac | 24 ++--- contrib/devtools/copyright_header.py | 2 +- doc/developer-notes.md | 4 +- qa/README.md | 87 ----------------- src/Makefile.test.include | 49 +--------- src/test/README.md | 11 +-- src/test/bitcoin-util-test.py | 45 --------- src/test/buildenv.py.in | 2 - test/README.md | 97 +++++++++++++++++++ {qa/rpc-tests => test/functional}/.gitignore | 0 {qa/rpc-tests => test/functional}/README.md | 0 .../functional}/abandonconflict.py | 0 .../functional}/addressindex.py | 0 .../functional}/assumevalid.py | 0 .../functional}/autois-mempool.py | 0 .../functional}/bip65-cltv-p2p.py | 0 .../functional}/bip65-cltv.py | 0 .../functional}/bip68-112-113-p2p.py | 0 .../functional}/bip68-sequence.py | 0 .../functional}/bip9-softforks.py | 0 .../functional}/bipdersig-p2p.py | 0 .../functional}/bipdersig.py | 0 .../functional}/blockchain.py | 0 .../functional/config.ini.in | 2 +- .../functional}/create_cache.py | 2 +- .../functional}/decodescript.py | 0 .../functional}/dip3-deterministicmns.py | 0 .../functional}/dip4-coinbasemerkleroots.py | 0 .../functional}/disablewallet.py | 0 .../functional}/forknotify.py | 0 .../functional}/fundrawtransaction-hd.py | 0 .../functional}/fundrawtransaction.py | 0 .../functional}/getblocktemplate_longpoll.py | 0 .../functional}/getblocktemplate_proposals.py | 0 .../functional}/getchaintips.py | 0 .../functional}/httpbasics.py | 0 .../functional}/import-rescan.py | 0 .../functional}/importmulti.py | 0 .../functional}/importprunedfunds.py | 0 .../functional}/invalidateblock.py | 0 .../functional}/invalidblockrequest.py | 0 .../functional}/invalidtxrequest.py | 0 .../functional}/keypool-hd.py | 0 {qa/rpc-tests => test/functional}/keypool.py | 0 .../functional}/listsinceblock.py | 0 .../functional}/listtransactions.py | 0 .../functional}/llmq-chainlocks.py | 0 .../functional}/llmq-dkgerrors.py | 0 .../functional}/llmq-is-cl-conflicts.py | 0 .../functional}/llmq-signing.py | 0 .../functional}/llmq-simplepose.py | 0 .../functional}/maxblocksinflight.py | 0 .../functional}/maxuploadtarget.py | 0 .../functional}/mempool_limit.py | 0 .../functional}/mempool_packages.py | 0 .../functional}/mempool_reorg.py | 0 .../functional}/mempool_resurrect_test.py | 0 .../functional}/mempool_spendcoinbase.py | 0 .../functional}/merkle_blocks.py | 0 .../functional}/multi_rpc.py | 0 .../functional}/multikeysporks.py | 0 .../functional}/nodehandling.py | 0 .../functional}/nulldummy.py | 0 .../functional}/p2p-acceptblock.py | 0 .../functional}/p2p-autoinstantsend.py | 0 .../functional}/p2p-compactblocks.py | 0 .../functional}/p2p-fingerprint.py | 0 .../functional}/p2p-fullblocktest.py | 0 .../functional}/p2p-instantsend.py | 0 .../functional}/p2p-leaktests.py | 0 .../functional}/p2p-mempool.py | 0 .../functional}/p2p-timeouts.py | 0 .../functional}/p2p-versionbits-warning.py | 0 .../functional}/preciousblock.py | 0 .../functional}/prioritise_transaction.py | 0 .../functional}/proxy_test.py | 0 {qa/rpc-tests => test/functional}/pruning.py | 0 .../functional}/rawtransactions.py | 0 .../functional}/receivedby.py | 0 {qa/rpc-tests => test/functional}/reindex.py | 0 {qa/rpc-tests => test/functional}/rest.py | 0 .../functional}/rpcbind_test.py | 0 .../functional}/rpcnamedargs.py | 0 .../functional}/sendheaders.py | 0 .../functional}/signmessages.py | 0 .../functional}/signrawtransactions.py | 0 .../functional}/smartfees.py | 0 .../functional}/spentindex.py | 0 {qa/rpc-tests => test/functional}/sporks.py | 0 .../functional}/test_framework/__init__.py | 0 .../functional}/test_framework/authproxy.py | 0 .../functional}/test_framework/bignum.py | 0 .../functional}/test_framework/blockstore.py | 0 .../functional}/test_framework/blocktools.py | 0 .../functional}/test_framework/comptool.py | 0 .../functional}/test_framework/coverage.py | 0 .../functional}/test_framework/key.py | 0 .../functional}/test_framework/mininode.py | 0 .../functional}/test_framework/netutil.py | 0 .../functional}/test_framework/script.py | 0 .../functional}/test_framework/siphash.py | 0 .../functional}/test_framework/socks5.py | 0 .../test_framework/test_framework.py | 0 .../functional}/test_framework/util.py | 0 .../functional/test_runner.py | 37 ++++--- .../functional}/timestampindex.py | 0 {qa/rpc-tests => test/functional}/txindex.py | 0 .../functional}/txn_clone.py | 0 .../functional}/txn_doublespend.py | 0 .../functional}/wallet-accounts.py | 0 .../functional}/wallet-dump.py | 0 .../functional}/wallet-hd.py | 0 {qa/rpc-tests => test/functional}/wallet.py | 0 .../functional}/walletbackup.py | 0 .../functional}/zapwallettxes.py | 0 {qa/rpc-tests => test/functional}/zmq_test.py | 0 {src/test => test/util}/bctest.py | 6 +- test/util/bitcoin-util-test.py | 36 +++++++ test/util/buildenv.py.in | 4 + .../util}/data/bitcoin-util-test.json | 0 {src/test => test/util}/data/blanktxv1.hex | 0 {src/test => test/util}/data/blanktxv1.json | 0 {src/test => test/util}/data/blanktxv2.hex | 0 {src/test => test/util}/data/blanktxv2.json | 0 .../test => test/util}/data/tt-delin1-out.hex | 0 .../util}/data/tt-delin1-out.json | 0 .../util}/data/tt-delout1-out.hex | 0 .../util}/data/tt-delout1-out.json | 0 .../util}/data/tt-locktime317000-out.hex | 0 .../util}/data/tt-locktime317000-out.json | 0 {src/test => test/util}/data/tx394b54bb.hex | 0 {src/test => test/util}/data/txcreate1.hex | 0 {src/test => test/util}/data/txcreate1.json | 0 {src/test => test/util}/data/txcreate2.hex | 0 {src/test => test/util}/data/txcreate2.json | 0 .../test => test/util}/data/txcreatedata1.hex | 0 .../util}/data/txcreatedata1.json | 0 .../test => test/util}/data/txcreatedata2.hex | 0 .../util}/data/txcreatedata2.json | 0 .../util}/data/txcreatedata_seq0.hex | 0 .../util}/data/txcreatedata_seq0.json | 0 .../util}/data/txcreatedata_seq1.hex | 0 .../util}/data/txcreatedata_seq1.json | 0 .../util}/data/txcreatemultisig1.hex | 0 .../util}/data/txcreatemultisig1.json | 0 .../util}/data/txcreatemultisig2.hex | 0 .../util}/data/txcreatemultisig2.json | 0 .../util}/data/txcreateoutpubkey1.hex | 0 .../util}/data/txcreateoutpubkey1.json | 0 .../util}/data/txcreatescript1.hex | 0 .../util}/data/txcreatescript1.json | 0 .../util}/data/txcreatescript2.hex | 0 .../util}/data/txcreatescript2.json | 0 .../util}/data/txcreatesignv1.hex | 0 .../util}/data/txcreatesignv1.json | 0 .../util}/data/txcreatesignv2.hex | 0 160 files changed, 239 insertions(+), 245 deletions(-) delete mode 100644 qa/README.md delete mode 100755 src/test/bitcoin-util-test.py delete mode 100644 src/test/buildenv.py.in create mode 100644 test/README.md rename {qa/rpc-tests => test/functional}/.gitignore (100%) rename {qa/rpc-tests => test/functional}/README.md (100%) rename {qa/rpc-tests => test/functional}/abandonconflict.py (100%) rename {qa/rpc-tests => test/functional}/addressindex.py (100%) rename {qa/rpc-tests => test/functional}/assumevalid.py (100%) rename {qa/rpc-tests => test/functional}/autois-mempool.py (100%) rename {qa/rpc-tests => test/functional}/bip65-cltv-p2p.py (100%) rename {qa/rpc-tests => test/functional}/bip65-cltv.py (100%) rename {qa/rpc-tests => test/functional}/bip68-112-113-p2p.py (100%) rename {qa/rpc-tests => test/functional}/bip68-sequence.py (100%) rename {qa/rpc-tests => test/functional}/bip9-softforks.py (100%) rename {qa/rpc-tests => test/functional}/bipdersig-p2p.py (100%) rename {qa/rpc-tests => test/functional}/bipdersig.py (100%) rename {qa/rpc-tests => test/functional}/blockchain.py (100%) rename qa/pull-tester/tests_config.ini.in => test/functional/config.ini.in (95%) rename {qa/rpc-tests => test/functional}/create_cache.py (89%) rename {qa/rpc-tests => test/functional}/decodescript.py (100%) rename {qa/rpc-tests => test/functional}/dip3-deterministicmns.py (100%) rename {qa/rpc-tests => test/functional}/dip4-coinbasemerkleroots.py (100%) rename {qa/rpc-tests => test/functional}/disablewallet.py (100%) rename {qa/rpc-tests => test/functional}/forknotify.py (100%) rename {qa/rpc-tests => test/functional}/fundrawtransaction-hd.py (100%) rename {qa/rpc-tests => test/functional}/fundrawtransaction.py (100%) rename {qa/rpc-tests => test/functional}/getblocktemplate_longpoll.py (100%) rename {qa/rpc-tests => test/functional}/getblocktemplate_proposals.py (100%) rename {qa/rpc-tests => test/functional}/getchaintips.py (100%) rename {qa/rpc-tests => test/functional}/httpbasics.py (100%) rename {qa/rpc-tests => test/functional}/import-rescan.py (100%) rename {qa/rpc-tests => test/functional}/importmulti.py (100%) rename {qa/rpc-tests => test/functional}/importprunedfunds.py (100%) rename {qa/rpc-tests => test/functional}/invalidateblock.py (100%) rename {qa/rpc-tests => test/functional}/invalidblockrequest.py (100%) rename {qa/rpc-tests => test/functional}/invalidtxrequest.py (100%) rename {qa/rpc-tests => test/functional}/keypool-hd.py (100%) rename {qa/rpc-tests => test/functional}/keypool.py (100%) rename {qa/rpc-tests => test/functional}/listsinceblock.py (100%) rename {qa/rpc-tests => test/functional}/listtransactions.py (100%) rename {qa/rpc-tests => test/functional}/llmq-chainlocks.py (100%) rename {qa/rpc-tests => test/functional}/llmq-dkgerrors.py (100%) rename {qa/rpc-tests => test/functional}/llmq-is-cl-conflicts.py (100%) rename {qa/rpc-tests => test/functional}/llmq-signing.py (100%) rename {qa/rpc-tests => test/functional}/llmq-simplepose.py (100%) rename {qa/rpc-tests => test/functional}/maxblocksinflight.py (100%) rename {qa/rpc-tests => test/functional}/maxuploadtarget.py (100%) rename {qa/rpc-tests => test/functional}/mempool_limit.py (100%) rename {qa/rpc-tests => test/functional}/mempool_packages.py (100%) rename {qa/rpc-tests => test/functional}/mempool_reorg.py (100%) rename {qa/rpc-tests => test/functional}/mempool_resurrect_test.py (100%) rename {qa/rpc-tests => test/functional}/mempool_spendcoinbase.py (100%) rename {qa/rpc-tests => test/functional}/merkle_blocks.py (100%) rename {qa/rpc-tests => test/functional}/multi_rpc.py (100%) rename {qa/rpc-tests => test/functional}/multikeysporks.py (100%) rename {qa/rpc-tests => test/functional}/nodehandling.py (100%) rename {qa/rpc-tests => test/functional}/nulldummy.py (100%) rename {qa/rpc-tests => test/functional}/p2p-acceptblock.py (100%) rename {qa/rpc-tests => test/functional}/p2p-autoinstantsend.py (100%) rename {qa/rpc-tests => test/functional}/p2p-compactblocks.py (100%) rename {qa/rpc-tests => test/functional}/p2p-fingerprint.py (100%) rename {qa/rpc-tests => test/functional}/p2p-fullblocktest.py (100%) rename {qa/rpc-tests => test/functional}/p2p-instantsend.py (100%) rename {qa/rpc-tests => test/functional}/p2p-leaktests.py (100%) rename {qa/rpc-tests => test/functional}/p2p-mempool.py (100%) rename {qa/rpc-tests => test/functional}/p2p-timeouts.py (100%) rename {qa/rpc-tests => test/functional}/p2p-versionbits-warning.py (100%) rename {qa/rpc-tests => test/functional}/preciousblock.py (100%) rename {qa/rpc-tests => test/functional}/prioritise_transaction.py (100%) rename {qa/rpc-tests => test/functional}/proxy_test.py (100%) rename {qa/rpc-tests => test/functional}/pruning.py (100%) rename {qa/rpc-tests => test/functional}/rawtransactions.py (100%) rename {qa/rpc-tests => test/functional}/receivedby.py (100%) rename {qa/rpc-tests => test/functional}/reindex.py (100%) rename {qa/rpc-tests => test/functional}/rest.py (100%) rename {qa/rpc-tests => test/functional}/rpcbind_test.py (100%) rename {qa/rpc-tests => test/functional}/rpcnamedargs.py (100%) rename {qa/rpc-tests => test/functional}/sendheaders.py (100%) rename {qa/rpc-tests => test/functional}/signmessages.py (100%) rename {qa/rpc-tests => test/functional}/signrawtransactions.py (100%) rename {qa/rpc-tests => test/functional}/smartfees.py (100%) rename {qa/rpc-tests => test/functional}/spentindex.py (100%) rename {qa/rpc-tests => test/functional}/sporks.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/__init__.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/authproxy.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/bignum.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/blockstore.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/blocktools.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/comptool.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/coverage.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/key.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/mininode.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/netutil.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/script.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/siphash.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/socks5.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/test_framework.py (100%) rename {qa/rpc-tests => test/functional}/test_framework/util.py (100%) rename qa/pull-tester/rpc-tests.py => test/functional/test_runner.py (92%) rename {qa/rpc-tests => test/functional}/timestampindex.py (100%) rename {qa/rpc-tests => test/functional}/txindex.py (100%) rename {qa/rpc-tests => test/functional}/txn_clone.py (100%) rename {qa/rpc-tests => test/functional}/txn_doublespend.py (100%) rename {qa/rpc-tests => test/functional}/wallet-accounts.py (100%) rename {qa/rpc-tests => test/functional}/wallet-dump.py (100%) rename {qa/rpc-tests => test/functional}/wallet-hd.py (100%) rename {qa/rpc-tests => test/functional}/wallet.py (100%) rename {qa/rpc-tests => test/functional}/walletbackup.py (100%) rename {qa/rpc-tests => test/functional}/zapwallettxes.py (100%) rename {qa/rpc-tests => test/functional}/zmq_test.py (100%) rename {src/test => test/util}/bctest.py (96%) create mode 100755 test/util/bitcoin-util-test.py create mode 100644 test/util/buildenv.py.in rename {src/test => test/util}/data/bitcoin-util-test.json (100%) rename {src/test => test/util}/data/blanktxv1.hex (100%) rename {src/test => test/util}/data/blanktxv1.json (100%) rename {src/test => test/util}/data/blanktxv2.hex (100%) rename {src/test => test/util}/data/blanktxv2.json (100%) rename {src/test => test/util}/data/tt-delin1-out.hex (100%) rename {src/test => test/util}/data/tt-delin1-out.json (100%) rename {src/test => test/util}/data/tt-delout1-out.hex (100%) rename {src/test => test/util}/data/tt-delout1-out.json (100%) rename {src/test => test/util}/data/tt-locktime317000-out.hex (100%) rename {src/test => test/util}/data/tt-locktime317000-out.json (100%) rename {src/test => test/util}/data/tx394b54bb.hex (100%) rename {src/test => test/util}/data/txcreate1.hex (100%) rename {src/test => test/util}/data/txcreate1.json (100%) rename {src/test => test/util}/data/txcreate2.hex (100%) rename {src/test => test/util}/data/txcreate2.json (100%) rename {src/test => test/util}/data/txcreatedata1.hex (100%) rename {src/test => test/util}/data/txcreatedata1.json (100%) rename {src/test => test/util}/data/txcreatedata2.hex (100%) rename {src/test => test/util}/data/txcreatedata2.json (100%) rename {src/test => test/util}/data/txcreatedata_seq0.hex (100%) rename {src/test => test/util}/data/txcreatedata_seq0.json (100%) rename {src/test => test/util}/data/txcreatedata_seq1.hex (100%) rename {src/test => test/util}/data/txcreatedata_seq1.json (100%) rename {src/test => test/util}/data/txcreatemultisig1.hex (100%) rename {src/test => test/util}/data/txcreatemultisig1.json (100%) rename {src/test => test/util}/data/txcreatemultisig2.hex (100%) rename {src/test => test/util}/data/txcreatemultisig2.json (100%) rename {src/test => test/util}/data/txcreateoutpubkey1.hex (100%) rename {src/test => test/util}/data/txcreateoutpubkey1.json (100%) rename {src/test => test/util}/data/txcreatescript1.hex (100%) rename {src/test => test/util}/data/txcreatescript1.json (100%) rename {src/test => test/util}/data/txcreatescript2.hex (100%) rename {src/test => test/util}/data/txcreatescript2.json (100%) rename {src/test => test/util}/data/txcreatesignv1.hex (100%) rename {src/test => test/util}/data/txcreatesignv1.json (100%) rename {src/test => test/util}/data/txcreatesignv2.hex (100%) diff --git a/.gitignore b/.gitignore index d34b5eb02a..c3be44a72c 100644 --- a/.gitignore +++ b/.gitignore @@ -108,9 +108,9 @@ coverage_percent.txt linux-coverage-build linux-build win32-build -qa/pull-tester/tests_config.py -qa/pull-tester/tests_config.ini -qa/cache/* +test/functional/config.ini +test/util/buildenv.py +test/cache/* !src/leveldb*/Makefile diff --git a/Makefile.am b/Makefile.am index ce09ef59ea..12a48f61fc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -61,7 +61,7 @@ OSX_PACKAGING = $(OSX_DEPLOY_SCRIPT) $(OSX_FANCY_PLIST) $(OSX_INSTALLER_ICONS) \ COVERAGE_INFO = baseline_filtered_combined.info baseline.info \ leveldb_baseline.info test_dash_filtered.info total_coverage.info \ - baseline_filtered.info rpc_test.info rpc_test_filtered.info \ + baseline_filtered.info functional_test.info functional_test_filtered.info \ leveldb_baseline_filtered.info test_dash_coverage.info test_dash.info dist-hook: @@ -191,20 +191,20 @@ test_dash.info: baseline_filtered_combined.info test_dash_filtered.info: test_dash.info $(LCOV) -r $< "/usr/include/*" -o $@ -rpc_test.info: test_dash_filtered.info - -@TIMEOUT=15 python qa/pull-tester/rpc-tests.py $(EXTENDED_RPC_TESTS) - $(LCOV) -c -d $(abs_builddir)/src --t rpc-tests -o $@ +functional_test.info: test_dash_filtered.info + -@TIMEOUT=15 python test/functional/test_runner.py $(EXTENDED_FUNCTIONAL_TESTS) + $(LCOV) -c -d $(abs_builddir)/src --t functional-tests -o $@ $(LCOV) -z -d $(abs_builddir)/src $(LCOV) -z -d $(abs_builddir)/src/leveldb -rpc_test_filtered.info: rpc_test.info +functional_test_filtered.info: functional_test.info $(LCOV) -r $< "/usr/include/*" -o $@ test_dash_coverage.info: baseline_filtered_combined.info test_dash_filtered.info $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_dash_filtered.info -o $@ -total_coverage.info: baseline_filtered_combined.info test_dash_filtered.info rpc_test_filtered.info - $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_dash_filtered.info -a rpc_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt +total_coverage.info: baseline_filtered_combined.info test_dash_filtered.info functional_test_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_dash_filtered.info -a functional_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt test_dash.coverage/.dirstamp: test_dash_coverage.info $(GENHTML) -s $< -o $(@D) @@ -220,14 +220,58 @@ endif dist_noinst_SCRIPTS = autogen.sh -EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.py qa/rpc-tests $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS) +EXTRA_DIST = $(top_srcdir)/share/genbuild.sh test/functional/test_runner.py test/functional $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS) + +EXTRA_DIST += \ + test/util/bctest.py \ + test/util/bitcoin-util-test.py \ + test/util/data/bitcoin-util-test.json \ + test/util/data/blanktxv1.hex \ + test/util/data/blanktxv1.json \ + test/util/data/blanktxv2.hex \ + test/util/data/blanktxv2.json \ + test/util/data/tt-delin1-out.hex \ + test/util/data/tt-delin1-out.json \ + test/util/data/tt-delout1-out.hex \ + test/util/data/tt-delout1-out.json \ + test/util/data/tt-locktime317000-out.hex \ + test/util/data/tt-locktime317000-out.json \ + test/util/data/tx394b54bb.hex \ + test/util/data/txcreate1.hex \ + test/util/data/txcreate1.json \ + test/util/data/txcreate2.hex \ + test/util/data/txcreate2.json \ + test/util/data/txcreatedata1.hex \ + test/util/data/txcreatedata1.json \ + test/util/data/txcreatedata2.hex \ + test/util/data/txcreatedata2.json \ + test/util/data/txcreatedata_seq0.hex \ + test/util/data/txcreatedata_seq0.json \ + test/util/data/txcreatedata_seq1.hex \ + test/util/data/txcreatedata_seq1.json \ + test/util/data/txcreatemultisig1.hex \ + test/util/data/txcreatemultisig1.json \ + test/util/data/txcreatemultisig2.hex \ + test/util/data/txcreatemultisig2.json \ + test/util/data/txcreateoutpubkey1.hex \ + test/util/data/txcreateoutpubkey1.json \ + test/util/data/txcreatescript1.hex \ + test/util/data/txcreatescript1.json \ + test/util/data/txcreatescript2.hex \ + test/util/data/txcreatescript2.json \ + test/util/data/txcreatesignv1.hex \ + test/util/data/txcreatesignv1.json \ + test/util/data/txcreatesignv2.hex CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER) +# This file is problematic for out-of-tree builds if it exists. +DISTCLEANFILES = test/util/buildenv.pyc + .INTERMEDIATE: $(COVERAGE_INFO) DISTCHECK_CONFIGURE_FLAGS = --enable-man clean-local: - rm -rf coverage_percent.txt test_dash.coverage/ total.coverage/ qa/tmp/ cache/ $(OSX_APP) - rm -rf qa/pull-tester/__pycache__ + rm -rf coverage_percent.txt test_dash.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP) + rm -rf test/functional/__pycache__ diff --git a/README.md b/README.md index d73b989599..0f74079320 100644 --- a/README.md +++ b/README.md @@ -49,9 +49,9 @@ submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled in configure) with: `make check`. Further details on running and extending unit tests can be found in [/src/test/README.md](/src/test/README.md). -There are also [regression and integration tests](/qa) of the RPC interface, written +There are also [regression and integration tests](/test), written in Python, that are run automatically on the build server. -These tests can be run (if the [test dependencies](/qa) are installed) with: `qa/pull-tester/rpc-tests.py` +These tests can be run (if the [test dependencies](/test) are installed) with: `test/functional/test_runner.py` The Travis CI system makes sure that every pull request is built for Windows, Linux, and OS X, and that unit/sanity tests are run automatically. diff --git a/ci/test_integrationtests.sh b/ci/test_integrationtests.sh index 7b35739619..0edc9d6513 100755 --- a/ci/test_integrationtests.sh +++ b/ci/test_integrationtests.sh @@ -17,4 +17,4 @@ export LD_LIBRARY_PATH=$BUILD_DIR/depends/$HOST/lib cd build-ci/dashcore-$BUILD_TARGET -./qa/pull-tester/rpc-tests.py --coverage $PASS_ARGS +./test/functional/test_runner.py --coverage $PASS_ARGS diff --git a/configure.ac b/configure.ac index a67e0950e8..bacf8d3d21 100644 --- a/configure.ac +++ b/configure.ac @@ -124,10 +124,10 @@ AC_ARG_ENABLE(bench, [use_bench=$enableval], [use_bench=yes]) -AC_ARG_ENABLE([extended-rpc-tests], - AS_HELP_STRING([--enable-extended-rpc-tests],[enable expensive RPC tests when using lcov (default no)]), - [use_extended_rpc_tests=$enableval], - [use_extended_rpc_tests=no]) +AC_ARG_ENABLE([extended-functional-tests], + AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]), + [use_extended_functional_tests=$enableval], + [use_extended_functional_tests=no]) AC_ARG_WITH([qrencode], [AS_HELP_STRING([--with-qrencode], @@ -459,8 +459,8 @@ if test x$use_pkgconfig = xyes; then ]) fi -if test x$use_extended_rpc_tests != xno; then - AC_SUBST(EXTENDED_RPC_TESTS, -extended) +if test x$use_extended_functional_tests != xno; then + AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended) fi if test x$use_lcov = xyes; then @@ -1200,10 +1200,12 @@ AC_SUBST(EVENT_PTHREADS_LIBS) AC_SUBST(ZMQ_LIBS) AC_SUBST(PROTOBUF_LIBS) AC_SUBST(QR_LIBS) -AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist src/test/buildenv.py]) -AC_CONFIG_FILES([qa/pull-tester/tests_config.ini],[chmod +x qa/pull-tester/tests_config.ini]) +AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/functional/config.ini]) +AC_CONFIG_FILES([test/util/buildenv.py],[chmod +x test/util/buildenv.py]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) -AC_CONFIG_LINKS([qa/pull-tester/rpc-tests.py:qa/pull-tester/rpc-tests.py]) +AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py]) +AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py]) +AC_CONFIG_LINKS([test/util/bctest.py:test/util/bctest.py]) dnl boost's m4 checks do something really nasty: they export these vars. As a dnl result, they leak into secp256k1's configure and crazy things happen. @@ -1251,8 +1253,8 @@ esac dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows case ${OS} in *Windows*) - sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' qa/pull-tester/tests_config.py > qa/pull-tester/tests_config-2.py - mv qa/pull-tester/tests_config-2.py qa/pull-tester/tests_config.py + sed 's/BUILDDIR="\/\([[a-z]]\)/BUILDDIR="\1:/' test/functional/config.ini > test/functional/config-2.ini + mv test/functional/config-2.ini test/functional/config.ini ;; esac diff --git a/contrib/devtools/copyright_header.py b/contrib/devtools/copyright_header.py index 2444d5dd81..ac518d2dfa 100755 --- a/contrib/devtools/copyright_header.py +++ b/contrib/devtools/copyright_header.py @@ -33,7 +33,7 @@ EXCLUDE = [ 'src/tinyformat.h', 'src/leveldb/util/env_win.cc', 'src/crypto/ctaes/bench.c', - 'qa/rpc-tests/test_framework/bignum.py', + 'test/functional/test_framework/bignum.py', # python init: '*__init__.py', ] diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 0231cbeab4..003ecb4948 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -133,7 +133,7 @@ Run with the -testnet option to run with "play coins" on the test network, if yo are testing multi-machine code that needs to operate across the internet. If you are testing something that can run on one machine, run with the -regtest option. -In regression test mode, blocks can be created on-demand; see qa/rpc-tests/ for tests +In regression test mode, blocks can be created on-demand; see test/functional/ for tests that run in -regtest mode. **DEBUG_LOCKORDER** @@ -255,7 +255,7 @@ Wallet - *Rationale*: In RPC code that conditionally uses the wallet (such as `validateaddress`) it is easy to forget that global pointer `pwalletMain` - can be NULL. See `qa/rpc-tests/disablewallet.py` for functional tests + can be NULL. See `test/functional/disablewallet.py` for functional tests exercising the API with `-disablewallet` - Include `db_cxx.h` (BerkeleyDB header) only when `ENABLE_WALLET` is set diff --git a/qa/README.md b/qa/README.md deleted file mode 100644 index 0f66a85813..0000000000 --- a/qa/README.md +++ /dev/null @@ -1,87 +0,0 @@ -The [pull-tester](/qa/pull-tester/) folder contains a script to call -multiple tests from the [rpc-tests](/qa/rpc-tests/) folder. - -Every pull request to the Dash Core repository is built and run through -the regression test suite. You can also run all or only individual -tests locally. - -Test dependencies -================= -Before running the tests, the following must be installed. - -Unix ----- -The python3-zmq library is required. On Ubuntu or Debian it can be installed via: -``` -sudo apt-get install python3-zmq -``` - -OS X ------- -``` -pip3 install pyzmq -``` - -Running tests -============= - -You can run any single test by calling - - qa/pull-tester/rpc-tests.py - -Or you can run any combination of tests by calling - - qa/pull-tester/rpc-tests.py ... - -Run the regression test suite with - - qa/pull-tester/rpc-tests.py - -Run all possible tests with - - qa/pull-tester/rpc-tests.py --extended - -By default, tests will be run in parallel. To specify how many jobs to run, -append `--jobs=n` (default n=4). - -If you want to create a basic coverage report for the RPC test suite, append `--coverage`. - -Possible options, which apply to each individual test run: - -``` - -h, --help show this help message and exit - --nocleanup Leave dashds and test.* datadir on exit or error - --noshutdown Don't stop dashds after the test execution - --srcdir=SRCDIR Source directory containing dashd/dash-cli - (default: ../../src) - --tmpdir=TMPDIR Root directory for datadirs - --tracerpc Print out all RPC calls as they are made - --coveragedir=COVERAGEDIR - Write tested RPC commands into this directory -``` - -If you set the environment variable `PYTHON_DEBUG=1` you will get some debug -output (example: `PYTHON_DEBUG=1 qa/pull-tester/rpc-tests.py wallet`). - -A 200-block -regtest blockchain and wallets for four nodes -is created the first time a regression test is run and -is stored in the cache/ directory. Each node has 25 mature -blocks (25*500=12500 DASH) in its wallet. - -After the first run, the cache/ blockchain and wallets are -copied into a temporary directory and used as the initial -test state. - -If you get into a bad state, you should be able -to recover with: - -```bash -rm -rf cache -killall dashd -``` - -Writing tests -============= -You are encouraged to write tests for new or existing features. -Further information about the test framework and individual RPC -tests is found in [qa/rpc-tests](/qa/rpc-tests). diff --git a/src/Makefile.test.include b/src/Makefile.test.include index cd56343a29..75ec2f6831 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -8,48 +8,6 @@ bin_PROGRAMS += test/test_dash TEST_SRCDIR = test TEST_BINARY=test/test_dash$(EXEEXT) - -EXTRA_DIST += \ - test/bctest.py \ - test/bitcoin-util-test.py \ - test/data/bitcoin-util-test.json \ - test/data/blanktxv1.hex \ - test/data/blanktxv1.json \ - test/data/blanktxv2.hex \ - test/data/blanktxv2.json \ - test/data/tt-delin1-out.hex \ - test/data/tt-delin1-out.json \ - test/data/tt-delout1-out.hex \ - test/data/tt-delout1-out.json \ - test/data/tt-locktime317000-out.hex \ - test/data/tt-locktime317000-out.json \ - test/data/tx394b54bb.hex \ - test/data/txcreate1.hex \ - test/data/txcreate1.json \ - test/data/txcreate2.hex \ - test/data/txcreate2.json \ - test/data/txcreatedata1.hex \ - test/data/txcreatedata1.json \ - test/data/txcreatedata2.hex \ - test/data/txcreatedata2.json \ - test/data/txcreatedata_seq0.hex \ - test/data/txcreatedata_seq0.json \ - test/data/txcreatedata_seq1.hex \ - test/data/txcreatedata_seq1.json \ - test/data/txcreatemultisig1.hex \ - test/data/txcreatemultisig1.json \ - test/data/txcreatemultisig2.hex \ - test/data/txcreatemultisig2.json \ - test/data/txcreateoutpubkey1.hex \ - test/data/txcreateoutpubkey1.json \ - test/data/txcreatescript1.hex \ - test/data/txcreatescript1.json \ - test/data/txcreatescript2.hex \ - test/data/txcreatescript2.json \ - test/data/txcreatesignv1.hex \ - test/data/txcreatesignv1.json \ - test/data/txcreatesignv2.hex - JSON_TEST_FILES = \ test/data/script_tests.json \ test/data/base58_keys_valid.json \ @@ -174,9 +132,6 @@ CLEAN_BITCOIN_TEST = test/*.gcda test/*.gcno $(GENERATED_TEST_FILES) CLEANFILES += $(CLEAN_BITCOIN_TEST) -# This file is problematic for out-of-tree builds if it exists. -DISTCLEANFILES += test/buildenv.pyc - dash_test: $(TEST_BINARY) dash_test_check: $(TEST_BINARY) FORCE @@ -186,8 +141,8 @@ dash_test_clean : FORCE rm -f $(CLEAN_BITCOIN_TEST) $(test_test_dash_OBJECTS) $(TEST_BINARY) check-local: - @echo "Running test/bitcoin-util-test.py..." - $(AM_V_at)srcdir=$(srcdir) PYTHONPATH=$(builddir)/test $(PYTHON) $(srcdir)/test/bitcoin-util-test.py + @echo "Running test/util/bitcoin-util-test.py..." + $(PYTHON) $(top_builddir)/test/util/bitcoin-util-test.py $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check if EMBEDDED_UNIVALUE $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check diff --git a/src/test/README.md b/src/test/README.md index 69f1251a82..b7cc960872 100644 --- a/src/test/README.md +++ b/src/test/README.md @@ -39,7 +39,7 @@ unit tests as possible). The build system is setup to compile an executable called `test_dash` that runs all of the unit tests. The main source file is called -test_dash.cpp. To add a new unit test file to our test suite you need +test_dash.cpp. To add a new unit test file to our test suite you need to add the file to `src/Makefile.test.include`. The pattern is to create one test file for each class or source file for which you want to create unit tests. The file naming convention is `_tests.cpp` @@ -50,12 +50,3 @@ examine `uint256_tests.cpp`. For further reading, I found the following website to be helpful in explaining how the boost unit test framework works: [http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/](http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/). - -### bitcoin-util-test.py - -The test directory also contains the bitcoin-util-test.py tool, which tests bitcoin utils (currently just dash-tx). This test gets run automatically during the `make check` build process. It is also possible to run the test manually from the src directory: - -``` -test/bitcoin-util-test.py --srcdir=[current directory] - -``` \ No newline at end of file diff --git a/src/test/bitcoin-util-test.py b/src/test/bitcoin-util-test.py deleted file mode 100755 index e2087187aa..0000000000 --- a/src/test/bitcoin-util-test.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# Copyright 2014 BitPay Inc. -# Copyright 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. -from __future__ import division,print_function,unicode_literals -import os -import bctest -import buildenv -import argparse -import logging - -help_text="""Test framework for bitcoin utils. - -Runs automatically during `make check`. - -Can also be run manually from the src directory by specifying the source directory: - -test/bitcoin-util-test.py --srcdir='srcdir' [--verbose] -""" - -if __name__ == '__main__': - # Try to get the source directory from the environment variables. This will - # be set for `make check` automated runs. If environment variable is not set, - # then get the source directory from command line args. - try: - srcdir = os.environ["srcdir"] - verbose = False - except: - parser = argparse.ArgumentParser(description=help_text) - parser.add_argument('-s', '--srcdir') - parser.add_argument('-v', '--verbose', action='store_true') - args = parser.parse_args() - srcdir = args.srcdir - verbose = args.verbose - - if verbose: - level = logging.DEBUG - else: - level = logging.ERROR - formatter = '%(asctime)s - %(levelname)s - %(message)s' - # Add the format/level to the logger - logging.basicConfig(format = formatter, level=level) - - bctest.bctester(srcdir + "/test/data", "bitcoin-util-test.json", buildenv) diff --git a/src/test/buildenv.py.in b/src/test/buildenv.py.in deleted file mode 100644 index 153f34a3db..0000000000 --- a/src/test/buildenv.py.in +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python -exeext="@EXEEXT@" diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000000..aaaa0406c4 --- /dev/null +++ b/test/README.md @@ -0,0 +1,97 @@ +This directory contains integration tests that test dashd and its +utilities in their entirety. It does not contain unit tests, which +can be found in [/src/test](/src/test), [/src/wallet/test](/src/wallet/test), +etc. + +There are currently two sets of tests in this directory: + +- [functional](/test/functional) which test the functionality of +dashd and dash-qt by interacting with them through the RPC and P2P +interfaces. +- [util](test/util) which tests the dash utilities, currently only +dash-tx. + +The util tests are run as part of `make check` target. The functional +tests are run by the travis continuous build process whenever a pull +request is opened. Both sets of tests can also be run locally. + +Functional Test dependencies +============================ +The ZMQ functional test requires a python ZMQ library. To install it: + +- on Unix, run `sudo apt-get install python3-zmq` +- on mac OS, run `pip3 install pyzmq` + +Running tests locally +===================== + +Functional tests +---------------- + +You can run any single test by calling + + test/functional/test_runner.py + +Or you can run any combination of tests by calling + + test/functional/test_runner.py ... + +Run the regression test suite with + + test/functional/test_runner.py + +Run all possible tests with + + test/functional/test_runner.py --extended + +By default, tests will be run in parallel. To specify how many jobs to run, +append `--jobs=n` (default n=4). + +If you want to create a basic coverage report for the RPC test suite, append `--coverage`. + +Possible options, which apply to each individual test run: + +``` + -h, --help show this help message and exit + --nocleanup Leave dashds and test.* datadir on exit or error + --noshutdown Don't stop dashds after the test execution + --srcdir=SRCDIR Source directory containing dashd/dash-cli + (default: ../../src) + --tmpdir=TMPDIR Root directory for datadirs + --tracerpc Print out all RPC calls as they are made + --coveragedir=COVERAGEDIR + Write tested RPC commands into this directory +``` + +If you set the environment variable `PYTHON_DEBUG=1` you will get some debug +output (example: `PYTHON_DEBUG=1 test/functional/test_runner.py wallet`). + +A 200-block -regtest blockchain and wallets for four nodes +is created the first time a regression test is run and +is stored in the cache/ directory. Each node has 25 mature +blocks (25*500=12500 DASH) in its wallet. + +After the first run, the cache/ blockchain and wallets are +copied into a temporary directory and used as the initial +test state. + +If you get into a bad state, you should be able +to recover with: + +```bash +rm -rf cache +killall dashd +``` + +Util tests +---------- + +Util tests can be run locally by running `test/util/bitcoin-util-test.py`. +Use the `-v` option for verbose output. + +Writing functional tests +======================== + +You are encouraged to write functional tests for new or existing features. +Further information about the functional test framework and individual +tests is found in [test/functional](/test/functional). diff --git a/qa/rpc-tests/.gitignore b/test/functional/.gitignore similarity index 100% rename from qa/rpc-tests/.gitignore rename to test/functional/.gitignore diff --git a/qa/rpc-tests/README.md b/test/functional/README.md similarity index 100% rename from qa/rpc-tests/README.md rename to test/functional/README.md diff --git a/qa/rpc-tests/abandonconflict.py b/test/functional/abandonconflict.py similarity index 100% rename from qa/rpc-tests/abandonconflict.py rename to test/functional/abandonconflict.py diff --git a/qa/rpc-tests/addressindex.py b/test/functional/addressindex.py similarity index 100% rename from qa/rpc-tests/addressindex.py rename to test/functional/addressindex.py diff --git a/qa/rpc-tests/assumevalid.py b/test/functional/assumevalid.py similarity index 100% rename from qa/rpc-tests/assumevalid.py rename to test/functional/assumevalid.py diff --git a/qa/rpc-tests/autois-mempool.py b/test/functional/autois-mempool.py similarity index 100% rename from qa/rpc-tests/autois-mempool.py rename to test/functional/autois-mempool.py diff --git a/qa/rpc-tests/bip65-cltv-p2p.py b/test/functional/bip65-cltv-p2p.py similarity index 100% rename from qa/rpc-tests/bip65-cltv-p2p.py rename to test/functional/bip65-cltv-p2p.py diff --git a/qa/rpc-tests/bip65-cltv.py b/test/functional/bip65-cltv.py similarity index 100% rename from qa/rpc-tests/bip65-cltv.py rename to test/functional/bip65-cltv.py diff --git a/qa/rpc-tests/bip68-112-113-p2p.py b/test/functional/bip68-112-113-p2p.py similarity index 100% rename from qa/rpc-tests/bip68-112-113-p2p.py rename to test/functional/bip68-112-113-p2p.py diff --git a/qa/rpc-tests/bip68-sequence.py b/test/functional/bip68-sequence.py similarity index 100% rename from qa/rpc-tests/bip68-sequence.py rename to test/functional/bip68-sequence.py diff --git a/qa/rpc-tests/bip9-softforks.py b/test/functional/bip9-softforks.py similarity index 100% rename from qa/rpc-tests/bip9-softforks.py rename to test/functional/bip9-softforks.py diff --git a/qa/rpc-tests/bipdersig-p2p.py b/test/functional/bipdersig-p2p.py similarity index 100% rename from qa/rpc-tests/bipdersig-p2p.py rename to test/functional/bipdersig-p2p.py diff --git a/qa/rpc-tests/bipdersig.py b/test/functional/bipdersig.py similarity index 100% rename from qa/rpc-tests/bipdersig.py rename to test/functional/bipdersig.py diff --git a/qa/rpc-tests/blockchain.py b/test/functional/blockchain.py similarity index 100% rename from qa/rpc-tests/blockchain.py rename to test/functional/blockchain.py diff --git a/qa/pull-tester/tests_config.ini.in b/test/functional/config.ini.in similarity index 95% rename from qa/pull-tester/tests_config.ini.in rename to test/functional/config.ini.in index e3e457d0b1..29586c555d 100644 --- a/qa/pull-tester/tests_config.ini.in +++ b/test/functional/config.ini.in @@ -3,7 +3,7 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. # These environment variables are set by the build process and read by -# rpc-tests.py +# test/functional/test_runner.py [environment] SRCDIR=@abs_top_srcdir@ diff --git a/qa/rpc-tests/create_cache.py b/test/functional/create_cache.py similarity index 89% rename from qa/rpc-tests/create_cache.py rename to test/functional/create_cache.py index 13eac92bbc..39c4c0f47e 100755 --- a/qa/rpc-tests/create_cache.py +++ b/test/functional/create_cache.py @@ -5,7 +5,7 @@ """Create a blockchain cache. Creating a cache of the blockchain speeds up test execution when running -multiple qa tests. This helper script is executed by rpc-tests when multiple +multiple functional tests. This helper script is executed by test_runner when multiple tests are being run in parallel. """ diff --git a/qa/rpc-tests/decodescript.py b/test/functional/decodescript.py similarity index 100% rename from qa/rpc-tests/decodescript.py rename to test/functional/decodescript.py diff --git a/qa/rpc-tests/dip3-deterministicmns.py b/test/functional/dip3-deterministicmns.py similarity index 100% rename from qa/rpc-tests/dip3-deterministicmns.py rename to test/functional/dip3-deterministicmns.py diff --git a/qa/rpc-tests/dip4-coinbasemerkleroots.py b/test/functional/dip4-coinbasemerkleroots.py similarity index 100% rename from qa/rpc-tests/dip4-coinbasemerkleroots.py rename to test/functional/dip4-coinbasemerkleroots.py diff --git a/qa/rpc-tests/disablewallet.py b/test/functional/disablewallet.py similarity index 100% rename from qa/rpc-tests/disablewallet.py rename to test/functional/disablewallet.py diff --git a/qa/rpc-tests/forknotify.py b/test/functional/forknotify.py similarity index 100% rename from qa/rpc-tests/forknotify.py rename to test/functional/forknotify.py diff --git a/qa/rpc-tests/fundrawtransaction-hd.py b/test/functional/fundrawtransaction-hd.py similarity index 100% rename from qa/rpc-tests/fundrawtransaction-hd.py rename to test/functional/fundrawtransaction-hd.py diff --git a/qa/rpc-tests/fundrawtransaction.py b/test/functional/fundrawtransaction.py similarity index 100% rename from qa/rpc-tests/fundrawtransaction.py rename to test/functional/fundrawtransaction.py diff --git a/qa/rpc-tests/getblocktemplate_longpoll.py b/test/functional/getblocktemplate_longpoll.py similarity index 100% rename from qa/rpc-tests/getblocktemplate_longpoll.py rename to test/functional/getblocktemplate_longpoll.py diff --git a/qa/rpc-tests/getblocktemplate_proposals.py b/test/functional/getblocktemplate_proposals.py similarity index 100% rename from qa/rpc-tests/getblocktemplate_proposals.py rename to test/functional/getblocktemplate_proposals.py diff --git a/qa/rpc-tests/getchaintips.py b/test/functional/getchaintips.py similarity index 100% rename from qa/rpc-tests/getchaintips.py rename to test/functional/getchaintips.py diff --git a/qa/rpc-tests/httpbasics.py b/test/functional/httpbasics.py similarity index 100% rename from qa/rpc-tests/httpbasics.py rename to test/functional/httpbasics.py diff --git a/qa/rpc-tests/import-rescan.py b/test/functional/import-rescan.py similarity index 100% rename from qa/rpc-tests/import-rescan.py rename to test/functional/import-rescan.py diff --git a/qa/rpc-tests/importmulti.py b/test/functional/importmulti.py similarity index 100% rename from qa/rpc-tests/importmulti.py rename to test/functional/importmulti.py diff --git a/qa/rpc-tests/importprunedfunds.py b/test/functional/importprunedfunds.py similarity index 100% rename from qa/rpc-tests/importprunedfunds.py rename to test/functional/importprunedfunds.py diff --git a/qa/rpc-tests/invalidateblock.py b/test/functional/invalidateblock.py similarity index 100% rename from qa/rpc-tests/invalidateblock.py rename to test/functional/invalidateblock.py diff --git a/qa/rpc-tests/invalidblockrequest.py b/test/functional/invalidblockrequest.py similarity index 100% rename from qa/rpc-tests/invalidblockrequest.py rename to test/functional/invalidblockrequest.py diff --git a/qa/rpc-tests/invalidtxrequest.py b/test/functional/invalidtxrequest.py similarity index 100% rename from qa/rpc-tests/invalidtxrequest.py rename to test/functional/invalidtxrequest.py diff --git a/qa/rpc-tests/keypool-hd.py b/test/functional/keypool-hd.py similarity index 100% rename from qa/rpc-tests/keypool-hd.py rename to test/functional/keypool-hd.py diff --git a/qa/rpc-tests/keypool.py b/test/functional/keypool.py similarity index 100% rename from qa/rpc-tests/keypool.py rename to test/functional/keypool.py diff --git a/qa/rpc-tests/listsinceblock.py b/test/functional/listsinceblock.py similarity index 100% rename from qa/rpc-tests/listsinceblock.py rename to test/functional/listsinceblock.py diff --git a/qa/rpc-tests/listtransactions.py b/test/functional/listtransactions.py similarity index 100% rename from qa/rpc-tests/listtransactions.py rename to test/functional/listtransactions.py diff --git a/qa/rpc-tests/llmq-chainlocks.py b/test/functional/llmq-chainlocks.py similarity index 100% rename from qa/rpc-tests/llmq-chainlocks.py rename to test/functional/llmq-chainlocks.py diff --git a/qa/rpc-tests/llmq-dkgerrors.py b/test/functional/llmq-dkgerrors.py similarity index 100% rename from qa/rpc-tests/llmq-dkgerrors.py rename to test/functional/llmq-dkgerrors.py diff --git a/qa/rpc-tests/llmq-is-cl-conflicts.py b/test/functional/llmq-is-cl-conflicts.py similarity index 100% rename from qa/rpc-tests/llmq-is-cl-conflicts.py rename to test/functional/llmq-is-cl-conflicts.py diff --git a/qa/rpc-tests/llmq-signing.py b/test/functional/llmq-signing.py similarity index 100% rename from qa/rpc-tests/llmq-signing.py rename to test/functional/llmq-signing.py diff --git a/qa/rpc-tests/llmq-simplepose.py b/test/functional/llmq-simplepose.py similarity index 100% rename from qa/rpc-tests/llmq-simplepose.py rename to test/functional/llmq-simplepose.py diff --git a/qa/rpc-tests/maxblocksinflight.py b/test/functional/maxblocksinflight.py similarity index 100% rename from qa/rpc-tests/maxblocksinflight.py rename to test/functional/maxblocksinflight.py diff --git a/qa/rpc-tests/maxuploadtarget.py b/test/functional/maxuploadtarget.py similarity index 100% rename from qa/rpc-tests/maxuploadtarget.py rename to test/functional/maxuploadtarget.py diff --git a/qa/rpc-tests/mempool_limit.py b/test/functional/mempool_limit.py similarity index 100% rename from qa/rpc-tests/mempool_limit.py rename to test/functional/mempool_limit.py diff --git a/qa/rpc-tests/mempool_packages.py b/test/functional/mempool_packages.py similarity index 100% rename from qa/rpc-tests/mempool_packages.py rename to test/functional/mempool_packages.py diff --git a/qa/rpc-tests/mempool_reorg.py b/test/functional/mempool_reorg.py similarity index 100% rename from qa/rpc-tests/mempool_reorg.py rename to test/functional/mempool_reorg.py diff --git a/qa/rpc-tests/mempool_resurrect_test.py b/test/functional/mempool_resurrect_test.py similarity index 100% rename from qa/rpc-tests/mempool_resurrect_test.py rename to test/functional/mempool_resurrect_test.py diff --git a/qa/rpc-tests/mempool_spendcoinbase.py b/test/functional/mempool_spendcoinbase.py similarity index 100% rename from qa/rpc-tests/mempool_spendcoinbase.py rename to test/functional/mempool_spendcoinbase.py diff --git a/qa/rpc-tests/merkle_blocks.py b/test/functional/merkle_blocks.py similarity index 100% rename from qa/rpc-tests/merkle_blocks.py rename to test/functional/merkle_blocks.py diff --git a/qa/rpc-tests/multi_rpc.py b/test/functional/multi_rpc.py similarity index 100% rename from qa/rpc-tests/multi_rpc.py rename to test/functional/multi_rpc.py diff --git a/qa/rpc-tests/multikeysporks.py b/test/functional/multikeysporks.py similarity index 100% rename from qa/rpc-tests/multikeysporks.py rename to test/functional/multikeysporks.py diff --git a/qa/rpc-tests/nodehandling.py b/test/functional/nodehandling.py similarity index 100% rename from qa/rpc-tests/nodehandling.py rename to test/functional/nodehandling.py diff --git a/qa/rpc-tests/nulldummy.py b/test/functional/nulldummy.py similarity index 100% rename from qa/rpc-tests/nulldummy.py rename to test/functional/nulldummy.py diff --git a/qa/rpc-tests/p2p-acceptblock.py b/test/functional/p2p-acceptblock.py similarity index 100% rename from qa/rpc-tests/p2p-acceptblock.py rename to test/functional/p2p-acceptblock.py diff --git a/qa/rpc-tests/p2p-autoinstantsend.py b/test/functional/p2p-autoinstantsend.py similarity index 100% rename from qa/rpc-tests/p2p-autoinstantsend.py rename to test/functional/p2p-autoinstantsend.py diff --git a/qa/rpc-tests/p2p-compactblocks.py b/test/functional/p2p-compactblocks.py similarity index 100% rename from qa/rpc-tests/p2p-compactblocks.py rename to test/functional/p2p-compactblocks.py diff --git a/qa/rpc-tests/p2p-fingerprint.py b/test/functional/p2p-fingerprint.py similarity index 100% rename from qa/rpc-tests/p2p-fingerprint.py rename to test/functional/p2p-fingerprint.py diff --git a/qa/rpc-tests/p2p-fullblocktest.py b/test/functional/p2p-fullblocktest.py similarity index 100% rename from qa/rpc-tests/p2p-fullblocktest.py rename to test/functional/p2p-fullblocktest.py diff --git a/qa/rpc-tests/p2p-instantsend.py b/test/functional/p2p-instantsend.py similarity index 100% rename from qa/rpc-tests/p2p-instantsend.py rename to test/functional/p2p-instantsend.py diff --git a/qa/rpc-tests/p2p-leaktests.py b/test/functional/p2p-leaktests.py similarity index 100% rename from qa/rpc-tests/p2p-leaktests.py rename to test/functional/p2p-leaktests.py diff --git a/qa/rpc-tests/p2p-mempool.py b/test/functional/p2p-mempool.py similarity index 100% rename from qa/rpc-tests/p2p-mempool.py rename to test/functional/p2p-mempool.py diff --git a/qa/rpc-tests/p2p-timeouts.py b/test/functional/p2p-timeouts.py similarity index 100% rename from qa/rpc-tests/p2p-timeouts.py rename to test/functional/p2p-timeouts.py diff --git a/qa/rpc-tests/p2p-versionbits-warning.py b/test/functional/p2p-versionbits-warning.py similarity index 100% rename from qa/rpc-tests/p2p-versionbits-warning.py rename to test/functional/p2p-versionbits-warning.py diff --git a/qa/rpc-tests/preciousblock.py b/test/functional/preciousblock.py similarity index 100% rename from qa/rpc-tests/preciousblock.py rename to test/functional/preciousblock.py diff --git a/qa/rpc-tests/prioritise_transaction.py b/test/functional/prioritise_transaction.py similarity index 100% rename from qa/rpc-tests/prioritise_transaction.py rename to test/functional/prioritise_transaction.py diff --git a/qa/rpc-tests/proxy_test.py b/test/functional/proxy_test.py similarity index 100% rename from qa/rpc-tests/proxy_test.py rename to test/functional/proxy_test.py diff --git a/qa/rpc-tests/pruning.py b/test/functional/pruning.py similarity index 100% rename from qa/rpc-tests/pruning.py rename to test/functional/pruning.py diff --git a/qa/rpc-tests/rawtransactions.py b/test/functional/rawtransactions.py similarity index 100% rename from qa/rpc-tests/rawtransactions.py rename to test/functional/rawtransactions.py diff --git a/qa/rpc-tests/receivedby.py b/test/functional/receivedby.py similarity index 100% rename from qa/rpc-tests/receivedby.py rename to test/functional/receivedby.py diff --git a/qa/rpc-tests/reindex.py b/test/functional/reindex.py similarity index 100% rename from qa/rpc-tests/reindex.py rename to test/functional/reindex.py diff --git a/qa/rpc-tests/rest.py b/test/functional/rest.py similarity index 100% rename from qa/rpc-tests/rest.py rename to test/functional/rest.py diff --git a/qa/rpc-tests/rpcbind_test.py b/test/functional/rpcbind_test.py similarity index 100% rename from qa/rpc-tests/rpcbind_test.py rename to test/functional/rpcbind_test.py diff --git a/qa/rpc-tests/rpcnamedargs.py b/test/functional/rpcnamedargs.py similarity index 100% rename from qa/rpc-tests/rpcnamedargs.py rename to test/functional/rpcnamedargs.py diff --git a/qa/rpc-tests/sendheaders.py b/test/functional/sendheaders.py similarity index 100% rename from qa/rpc-tests/sendheaders.py rename to test/functional/sendheaders.py diff --git a/qa/rpc-tests/signmessages.py b/test/functional/signmessages.py similarity index 100% rename from qa/rpc-tests/signmessages.py rename to test/functional/signmessages.py diff --git a/qa/rpc-tests/signrawtransactions.py b/test/functional/signrawtransactions.py similarity index 100% rename from qa/rpc-tests/signrawtransactions.py rename to test/functional/signrawtransactions.py diff --git a/qa/rpc-tests/smartfees.py b/test/functional/smartfees.py similarity index 100% rename from qa/rpc-tests/smartfees.py rename to test/functional/smartfees.py diff --git a/qa/rpc-tests/spentindex.py b/test/functional/spentindex.py similarity index 100% rename from qa/rpc-tests/spentindex.py rename to test/functional/spentindex.py diff --git a/qa/rpc-tests/sporks.py b/test/functional/sporks.py similarity index 100% rename from qa/rpc-tests/sporks.py rename to test/functional/sporks.py diff --git a/qa/rpc-tests/test_framework/__init__.py b/test/functional/test_framework/__init__.py similarity index 100% rename from qa/rpc-tests/test_framework/__init__.py rename to test/functional/test_framework/__init__.py diff --git a/qa/rpc-tests/test_framework/authproxy.py b/test/functional/test_framework/authproxy.py similarity index 100% rename from qa/rpc-tests/test_framework/authproxy.py rename to test/functional/test_framework/authproxy.py diff --git a/qa/rpc-tests/test_framework/bignum.py b/test/functional/test_framework/bignum.py similarity index 100% rename from qa/rpc-tests/test_framework/bignum.py rename to test/functional/test_framework/bignum.py diff --git a/qa/rpc-tests/test_framework/blockstore.py b/test/functional/test_framework/blockstore.py similarity index 100% rename from qa/rpc-tests/test_framework/blockstore.py rename to test/functional/test_framework/blockstore.py diff --git a/qa/rpc-tests/test_framework/blocktools.py b/test/functional/test_framework/blocktools.py similarity index 100% rename from qa/rpc-tests/test_framework/blocktools.py rename to test/functional/test_framework/blocktools.py diff --git a/qa/rpc-tests/test_framework/comptool.py b/test/functional/test_framework/comptool.py similarity index 100% rename from qa/rpc-tests/test_framework/comptool.py rename to test/functional/test_framework/comptool.py diff --git a/qa/rpc-tests/test_framework/coverage.py b/test/functional/test_framework/coverage.py similarity index 100% rename from qa/rpc-tests/test_framework/coverage.py rename to test/functional/test_framework/coverage.py diff --git a/qa/rpc-tests/test_framework/key.py b/test/functional/test_framework/key.py similarity index 100% rename from qa/rpc-tests/test_framework/key.py rename to test/functional/test_framework/key.py diff --git a/qa/rpc-tests/test_framework/mininode.py b/test/functional/test_framework/mininode.py similarity index 100% rename from qa/rpc-tests/test_framework/mininode.py rename to test/functional/test_framework/mininode.py diff --git a/qa/rpc-tests/test_framework/netutil.py b/test/functional/test_framework/netutil.py similarity index 100% rename from qa/rpc-tests/test_framework/netutil.py rename to test/functional/test_framework/netutil.py diff --git a/qa/rpc-tests/test_framework/script.py b/test/functional/test_framework/script.py similarity index 100% rename from qa/rpc-tests/test_framework/script.py rename to test/functional/test_framework/script.py diff --git a/qa/rpc-tests/test_framework/siphash.py b/test/functional/test_framework/siphash.py similarity index 100% rename from qa/rpc-tests/test_framework/siphash.py rename to test/functional/test_framework/siphash.py diff --git a/qa/rpc-tests/test_framework/socks5.py b/test/functional/test_framework/socks5.py similarity index 100% rename from qa/rpc-tests/test_framework/socks5.py rename to test/functional/test_framework/socks5.py diff --git a/qa/rpc-tests/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py similarity index 100% rename from qa/rpc-tests/test_framework/test_framework.py rename to test/functional/test_framework/test_framework.py diff --git a/qa/rpc-tests/test_framework/util.py b/test/functional/test_framework/util.py similarity index 100% rename from qa/rpc-tests/test_framework/util.py rename to test/functional/test_framework/util.py diff --git a/qa/pull-tester/rpc-tests.py b/test/functional/test_runner.py similarity index 92% rename from qa/pull-tester/rpc-tests.py rename to test/functional/test_runner.py index 1522df7ba4..0a1ee9cebf 100755 --- a/qa/pull-tester/rpc-tests.py +++ b/test/functional/test_runner.py @@ -2,16 +2,15 @@ # Copyright (c) 2014-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. -""" -rpc-tests.py - run regression test suite +"""Run regression test suite. This module calls down into individual test cases via subprocess. It will forward all unrecognized arguments onto the individual test scripts. -RPC tests are disabled on Windows by default. Use --force to run them anyway. +Functional tests are disabled on Windows by default. Use --force to run them anyway. For a description of arguments recognized by test scripts, see -`qa/pull-tester/test_framework/test_framework.py:BitcoinTestFramework.main`. +`test/functional/test_framework/test_framework.py:BitcoinTestFramework.main`. """ @@ -102,7 +101,7 @@ BASE_SCRIPTS= [ ZMQ_SCRIPTS = [ # ZMQ test can only be run if Dash Core was built with zmq-enabled. - # call rpc_tests.py with -nozmq to explicitly exclude these tests. + # call test_runner.py with -nozmq to explicitly exclude these tests. "zmq_test.py"] EXTENDED_SCRIPTS = [ @@ -140,7 +139,7 @@ ALL_SCRIPTS = BASE_SCRIPTS + ZMQ_SCRIPTS + EXTENDED_SCRIPTS def main(): # Parse arguments and pass through unrecognised args parser = argparse.ArgumentParser(add_help=False, - usage='%(prog)s [rpc-test.py options] [script options] [scripts]', + usage='%(prog)s [test_runner.py options] [script options] [scripts]', description=__doc__, epilog=''' Help text and arguments for individual test script:''', @@ -160,7 +159,7 @@ def main(): # Read config generated by configure. config = configparser.ConfigParser() - config.read_file(open(os.path.dirname(__file__) + "/tests_config.ini")) + config.read_file(open(os.path.dirname(__file__) + "/config.ini")) enable_wallet = config["components"].getboolean("ENABLE_WALLET") enable_utils = config["components"].getboolean("ENABLE_UTILS") @@ -174,7 +173,7 @@ def main(): sys.exit(0) if not (enable_wallet and enable_utils and enable_bitcoind): - print("No rpc tests to run. Wallet, utils, and bitcoind must all be enabled") + print("No functional tests to run. Wallet, utils, and bitcoind must all be enabled") print("Rerun `configure` with -enable-wallet, -with-utils and -with-daemon and rerun make") sys.exit(0) @@ -184,7 +183,7 @@ def main(): import zmq except ImportError: print("ERROR: \"import zmq\" failed. Use -nozmq to run without the ZMQ tests." - "To run zmq tests, see dependency info in /qa/README.md.") + "To run zmq tests, see dependency info in /test/README.md.") raise # Build list of tests @@ -213,13 +212,13 @@ def main(): if not test_list: print("No valid test scripts specified. Check that your test is in one " - "of the test lists in rpc-tests.py, or run rpc-tests.py with no arguments to run all tests") + "of the test lists in test_runner.py, or run test_runner.py with no arguments to run all tests") sys.exit(0) if args.help: - # Print help for rpc-tests.py, then print help of the first script and exit. + # Print help for test_runner.py, then print help of the first script and exit. parser.print_help() - subprocess.check_call((config["environment"]["SRCDIR"] + '/qa/rpc-tests/' + test_list[0]).split() + ['-h']) + subprocess.check_call((config["environment"]["SRCDIR"] + '/test/functional/' + test_list[0]).split() + ['-h']) sys.exit(0) run_tests(test_list, config["environment"]["SRCDIR"], config["environment"]["BUILDDIR"], config["environment"]["EXEEXT"], args.jobs, args.coverage, passon_args) @@ -235,10 +234,10 @@ def run_tests(test_list, src_dir, build_dir, exeext, jobs=1, enable_coverage=Fal if "BITCOIND" not in os.environ: os.environ["BITCOIND"] = build_dir + '/src/dashd' + exeext - tests_dir = src_dir + '/qa/rpc-tests/' + tests_dir = src_dir + '/test/functional/' flags = ["--srcdir={}/src".format(build_dir)] + args - flags.append("--cachedir=%s/qa/cache" % build_dir) + flags.append("--cachedir=%s/test/cache" % build_dir) if enable_coverage: coverage = RPCCoverage() @@ -256,7 +255,7 @@ def run_tests(test_list, src_dir, build_dir, exeext, jobs=1, enable_coverage=Fal time_sum = 0 time0 = time.time() - job_queue = RPCTestHandler(jobs, tests_dir, test_list, flags) + job_queue = TestHandler(jobs, tests_dir, test_list, flags) max_len_name = len(max(test_list, key=len)) results = BOLD[1] + "%s | %s | %s\n\n" % ("TEST".ljust(max_len_name), "PASSED", "DURATION") + BOLD[0] @@ -284,7 +283,7 @@ def run_tests(test_list, src_dir, build_dir, exeext, jobs=1, enable_coverage=Fal sys.exit(not all_passed) -class RPCTestHandler: +class TestHandler: """ Trigger the testscrips passed in via the list. """ @@ -338,7 +337,7 @@ class RPCTestHandler: class RPCCoverage(object): """ - Coverage reporting utilities for pull-tester. + Coverage reporting utilities for test_runner. Coverage calculation works by having each test script subprocess write coverage files into a particular directory. These files contain the RPC @@ -348,7 +347,7 @@ class RPCCoverage(object): After all tests complete, the commands run are combined and diff'd against the complete list to calculate uncovered RPC commands. - See also: qa/rpc-tests/test_framework/coverage.py + See also: test/functional/test_framework/coverage.py """ def __init__(self): @@ -376,7 +375,7 @@ class RPCCoverage(object): Return a set of currently untested RPC commands. """ - # This is shared from `qa/rpc-tests/test-framework/coverage.py` + # This is shared from `test/functional/test-framework/coverage.py` reference_filename = 'rpc_interface.txt' coverage_file_prefix = 'coverage.' diff --git a/qa/rpc-tests/timestampindex.py b/test/functional/timestampindex.py similarity index 100% rename from qa/rpc-tests/timestampindex.py rename to test/functional/timestampindex.py diff --git a/qa/rpc-tests/txindex.py b/test/functional/txindex.py similarity index 100% rename from qa/rpc-tests/txindex.py rename to test/functional/txindex.py diff --git a/qa/rpc-tests/txn_clone.py b/test/functional/txn_clone.py similarity index 100% rename from qa/rpc-tests/txn_clone.py rename to test/functional/txn_clone.py diff --git a/qa/rpc-tests/txn_doublespend.py b/test/functional/txn_doublespend.py similarity index 100% rename from qa/rpc-tests/txn_doublespend.py rename to test/functional/txn_doublespend.py diff --git a/qa/rpc-tests/wallet-accounts.py b/test/functional/wallet-accounts.py similarity index 100% rename from qa/rpc-tests/wallet-accounts.py rename to test/functional/wallet-accounts.py diff --git a/qa/rpc-tests/wallet-dump.py b/test/functional/wallet-dump.py similarity index 100% rename from qa/rpc-tests/wallet-dump.py rename to test/functional/wallet-dump.py diff --git a/qa/rpc-tests/wallet-hd.py b/test/functional/wallet-hd.py similarity index 100% rename from qa/rpc-tests/wallet-hd.py rename to test/functional/wallet-hd.py diff --git a/qa/rpc-tests/wallet.py b/test/functional/wallet.py similarity index 100% rename from qa/rpc-tests/wallet.py rename to test/functional/wallet.py diff --git a/qa/rpc-tests/walletbackup.py b/test/functional/walletbackup.py similarity index 100% rename from qa/rpc-tests/walletbackup.py rename to test/functional/walletbackup.py diff --git a/qa/rpc-tests/zapwallettxes.py b/test/functional/zapwallettxes.py similarity index 100% rename from qa/rpc-tests/zapwallettxes.py rename to test/functional/zapwallettxes.py diff --git a/qa/rpc-tests/zmq_test.py b/test/functional/zmq_test.py similarity index 100% rename from qa/rpc-tests/zmq_test.py rename to test/functional/zmq_test.py diff --git a/src/test/bctest.py b/test/util/bctest.py similarity index 96% rename from src/test/bctest.py rename to test/util/bctest.py index c07ef6e3ed..b17cf77ae3 100644 --- a/src/test/bctest.py +++ b/test/util/bctest.py @@ -23,14 +23,14 @@ def parse_output(a, fmt): else: raise NotImplementedError("Don't know how to compare %s" % fmt) -def bctest(testDir, testObj, exeext): +def bctest(testDir, testObj, buildenv): """Runs a single test, comparing output and RC to expected output and RC. Raises an error if input can't be read, executable fails, or output/RC are not as expected. Error is caught by bctester() and reported. """ # Get the exec names and arguments - execprog = testObj['exec'] + exeext + execprog = buildenv.BUILDDIR + "/src/" + testObj['exec'] + buildenv.exeext execargs = testObj['args'] execrun = [execprog] + execargs @@ -124,7 +124,7 @@ def bctester(testDir, input_basename, buildenv): for testObj in input_data: try: - bctest(testDir, testObj, buildenv.exeext) + bctest(testDir, testObj, buildenv) logging.info("PASSED: " + testObj["description"]) except: logging.info("FAILED: " + testObj["description"]) diff --git a/test/util/bitcoin-util-test.py b/test/util/bitcoin-util-test.py new file mode 100755 index 0000000000..e09a25159d --- /dev/null +++ b/test/util/bitcoin-util-test.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# Copyright 2014 BitPay Inc. +# Copyright 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. +from __future__ import division,print_function,unicode_literals +import os +import sys +import argparse +import logging + +help_text="""Test framework for bitcoin utils. + +Runs automatically during `make check`. + +Can also be run manually.""" + +if __name__ == '__main__': + sys.path.append(os.path.dirname(os.path.abspath(__file__))) + import buildenv + import bctest + + parser = argparse.ArgumentParser(description=help_text) + parser.add_argument('-v', '--verbose', action='store_true') + args = parser.parse_args() + verbose = args.verbose + + if verbose: + level = logging.DEBUG + else: + level = logging.ERROR + formatter = '%(asctime)s - %(levelname)s - %(message)s' + # Add the format/level to the logger + logging.basicConfig(format = formatter, level=level) + + bctest.bctester(buildenv.SRCDIR + "/test/util/data", "bitcoin-util-test.json", buildenv) diff --git a/test/util/buildenv.py.in b/test/util/buildenv.py.in new file mode 100644 index 0000000000..33030b0348 --- /dev/null +++ b/test/util/buildenv.py.in @@ -0,0 +1,4 @@ +#!/usr/bin/env python +exeext="@EXEEXT@" +SRCDIR="@abs_top_srcdir@" +BUILDDIR="@abs_top_builddir@" diff --git a/src/test/data/bitcoin-util-test.json b/test/util/data/bitcoin-util-test.json similarity index 100% rename from src/test/data/bitcoin-util-test.json rename to test/util/data/bitcoin-util-test.json diff --git a/src/test/data/blanktxv1.hex b/test/util/data/blanktxv1.hex similarity index 100% rename from src/test/data/blanktxv1.hex rename to test/util/data/blanktxv1.hex diff --git a/src/test/data/blanktxv1.json b/test/util/data/blanktxv1.json similarity index 100% rename from src/test/data/blanktxv1.json rename to test/util/data/blanktxv1.json diff --git a/src/test/data/blanktxv2.hex b/test/util/data/blanktxv2.hex similarity index 100% rename from src/test/data/blanktxv2.hex rename to test/util/data/blanktxv2.hex diff --git a/src/test/data/blanktxv2.json b/test/util/data/blanktxv2.json similarity index 100% rename from src/test/data/blanktxv2.json rename to test/util/data/blanktxv2.json diff --git a/src/test/data/tt-delin1-out.hex b/test/util/data/tt-delin1-out.hex similarity index 100% rename from src/test/data/tt-delin1-out.hex rename to test/util/data/tt-delin1-out.hex diff --git a/src/test/data/tt-delin1-out.json b/test/util/data/tt-delin1-out.json similarity index 100% rename from src/test/data/tt-delin1-out.json rename to test/util/data/tt-delin1-out.json diff --git a/src/test/data/tt-delout1-out.hex b/test/util/data/tt-delout1-out.hex similarity index 100% rename from src/test/data/tt-delout1-out.hex rename to test/util/data/tt-delout1-out.hex diff --git a/src/test/data/tt-delout1-out.json b/test/util/data/tt-delout1-out.json similarity index 100% rename from src/test/data/tt-delout1-out.json rename to test/util/data/tt-delout1-out.json diff --git a/src/test/data/tt-locktime317000-out.hex b/test/util/data/tt-locktime317000-out.hex similarity index 100% rename from src/test/data/tt-locktime317000-out.hex rename to test/util/data/tt-locktime317000-out.hex diff --git a/src/test/data/tt-locktime317000-out.json b/test/util/data/tt-locktime317000-out.json similarity index 100% rename from src/test/data/tt-locktime317000-out.json rename to test/util/data/tt-locktime317000-out.json diff --git a/src/test/data/tx394b54bb.hex b/test/util/data/tx394b54bb.hex similarity index 100% rename from src/test/data/tx394b54bb.hex rename to test/util/data/tx394b54bb.hex diff --git a/src/test/data/txcreate1.hex b/test/util/data/txcreate1.hex similarity index 100% rename from src/test/data/txcreate1.hex rename to test/util/data/txcreate1.hex diff --git a/src/test/data/txcreate1.json b/test/util/data/txcreate1.json similarity index 100% rename from src/test/data/txcreate1.json rename to test/util/data/txcreate1.json diff --git a/src/test/data/txcreate2.hex b/test/util/data/txcreate2.hex similarity index 100% rename from src/test/data/txcreate2.hex rename to test/util/data/txcreate2.hex diff --git a/src/test/data/txcreate2.json b/test/util/data/txcreate2.json similarity index 100% rename from src/test/data/txcreate2.json rename to test/util/data/txcreate2.json diff --git a/src/test/data/txcreatedata1.hex b/test/util/data/txcreatedata1.hex similarity index 100% rename from src/test/data/txcreatedata1.hex rename to test/util/data/txcreatedata1.hex diff --git a/src/test/data/txcreatedata1.json b/test/util/data/txcreatedata1.json similarity index 100% rename from src/test/data/txcreatedata1.json rename to test/util/data/txcreatedata1.json diff --git a/src/test/data/txcreatedata2.hex b/test/util/data/txcreatedata2.hex similarity index 100% rename from src/test/data/txcreatedata2.hex rename to test/util/data/txcreatedata2.hex diff --git a/src/test/data/txcreatedata2.json b/test/util/data/txcreatedata2.json similarity index 100% rename from src/test/data/txcreatedata2.json rename to test/util/data/txcreatedata2.json diff --git a/src/test/data/txcreatedata_seq0.hex b/test/util/data/txcreatedata_seq0.hex similarity index 100% rename from src/test/data/txcreatedata_seq0.hex rename to test/util/data/txcreatedata_seq0.hex diff --git a/src/test/data/txcreatedata_seq0.json b/test/util/data/txcreatedata_seq0.json similarity index 100% rename from src/test/data/txcreatedata_seq0.json rename to test/util/data/txcreatedata_seq0.json diff --git a/src/test/data/txcreatedata_seq1.hex b/test/util/data/txcreatedata_seq1.hex similarity index 100% rename from src/test/data/txcreatedata_seq1.hex rename to test/util/data/txcreatedata_seq1.hex diff --git a/src/test/data/txcreatedata_seq1.json b/test/util/data/txcreatedata_seq1.json similarity index 100% rename from src/test/data/txcreatedata_seq1.json rename to test/util/data/txcreatedata_seq1.json diff --git a/src/test/data/txcreatemultisig1.hex b/test/util/data/txcreatemultisig1.hex similarity index 100% rename from src/test/data/txcreatemultisig1.hex rename to test/util/data/txcreatemultisig1.hex diff --git a/src/test/data/txcreatemultisig1.json b/test/util/data/txcreatemultisig1.json similarity index 100% rename from src/test/data/txcreatemultisig1.json rename to test/util/data/txcreatemultisig1.json diff --git a/src/test/data/txcreatemultisig2.hex b/test/util/data/txcreatemultisig2.hex similarity index 100% rename from src/test/data/txcreatemultisig2.hex rename to test/util/data/txcreatemultisig2.hex diff --git a/src/test/data/txcreatemultisig2.json b/test/util/data/txcreatemultisig2.json similarity index 100% rename from src/test/data/txcreatemultisig2.json rename to test/util/data/txcreatemultisig2.json diff --git a/src/test/data/txcreateoutpubkey1.hex b/test/util/data/txcreateoutpubkey1.hex similarity index 100% rename from src/test/data/txcreateoutpubkey1.hex rename to test/util/data/txcreateoutpubkey1.hex diff --git a/src/test/data/txcreateoutpubkey1.json b/test/util/data/txcreateoutpubkey1.json similarity index 100% rename from src/test/data/txcreateoutpubkey1.json rename to test/util/data/txcreateoutpubkey1.json diff --git a/src/test/data/txcreatescript1.hex b/test/util/data/txcreatescript1.hex similarity index 100% rename from src/test/data/txcreatescript1.hex rename to test/util/data/txcreatescript1.hex diff --git a/src/test/data/txcreatescript1.json b/test/util/data/txcreatescript1.json similarity index 100% rename from src/test/data/txcreatescript1.json rename to test/util/data/txcreatescript1.json diff --git a/src/test/data/txcreatescript2.hex b/test/util/data/txcreatescript2.hex similarity index 100% rename from src/test/data/txcreatescript2.hex rename to test/util/data/txcreatescript2.hex diff --git a/src/test/data/txcreatescript2.json b/test/util/data/txcreatescript2.json similarity index 100% rename from src/test/data/txcreatescript2.json rename to test/util/data/txcreatescript2.json diff --git a/src/test/data/txcreatesignv1.hex b/test/util/data/txcreatesignv1.hex similarity index 100% rename from src/test/data/txcreatesignv1.hex rename to test/util/data/txcreatesignv1.hex diff --git a/src/test/data/txcreatesignv1.json b/test/util/data/txcreatesignv1.json similarity index 100% rename from src/test/data/txcreatesignv1.json rename to test/util/data/txcreatesignv1.json diff --git a/src/test/data/txcreatesignv2.hex b/test/util/data/txcreatesignv2.hex similarity index 100% rename from src/test/data/txcreatesignv2.hex rename to test/util/data/txcreatesignv2.hex