neobytes/src/test
Alexander Block ccee103a0e Backport "assumed valid blocks" feature from Bitcoin 0.13 (#1582)
* IBD check uses minimumchain work instead of checkpoints.

This introduces a 'minimum chain work' chainparam which is intended
 to be the known amount of work in the chain for the network at the
 time of software release.  If you don't have this much work, you're
 not yet caught up.

This is used instead of the count of blocks test from checkpoints.

This criteria is trivial to keep updated as there is no element of
subjectivity, trust, or position dependence to it. It is also a more
reliable metric of sync status than a block count.

* Remove GetTotalBlocksEstimate and checkpoint tests that test nothing.

GetTotalBlocksEstimate is no longer used and it was the only thing
 the checkpoint tests were testing.

Since checkpoints are on their way out it makes more sense to remove
 the test file than to cook up a new pointless test.

# Conflicts:
#	src/Makefile.test.include
#	src/test/Checkpoints_tests.cpp

* IsInitialBlockDownload no longer uses header-only timestamps.

This avoids a corner case (mostly visible on testnet) where bogus
 headers can keep nodes in IsInitialBlockDownload.

* Delay parallel block download until chain has sufficient work

nMinimumChainWork is an anti-DoS threshold; wait until we have a proposed
tip with more work than that before downloading blocks towards that tip.

* Add timeout for headers sync

At startup, we choose one peer to serve us the headers chain, until
our best header is close to caught up.  Disconnect this peer if more
than 15 minutes + 1ms/expected_header passes and our best header
is still more than 1 day away from current time.

* Introduce assumevalid setting to skip presumed valid scripts.

This disentangles the script validation skipping from checkpoints.

A new option is introduced "assumevalid" which specifies a block whos
 ancestors we assume all have valid scriptsigs and so we do not check
 them when they are also burried under the best header by two weeks
 worth of work.

Unlike checkpoints this has no influence on consensus unless you set
 it to a block with an invalid history.  Because of this it can be
 easily be updated without risk of influencing the network consensus.

This results in a massive IBD speedup.

This approach was independently recommended by Peter Todd and Luke-Jr
 since POW based signature skipping (see PR#9180) does not have the
 verifiable properties of a specific hash and may create bad incentives.

The downside is that, like checkpoints, the defaults bitrot and older
 releases will sync slower.  On the plus side users can provide their
 own value here, and if they set it to something crazy all that will
 happen is more time will be spend validating signatures.

Checkblocks and checklevel are also moved to the hidden debug options:
 Especially now that checkblocks has a low default there is little need
 to change these settings, and users frequently misunderstand them as
 influencing security or IBD speed.  By hiding them we offset the
 space added by this new option.

* Add consensusParams to FindNextBlocksToDownload

* Adjust check in headers timeout logic to align with 144 blocks in Dash
2017-08-23 17:21:08 +03:00
..
data Validate proposals on prepare and submit (#1488) 2017-06-26 16:56:29 +03:00
accounting_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
addrman_tests.cpp Backport Bitcoin PR#7749: Enforce expected outbound services (#1508) 2017-07-05 06:45:23 +03:00
alert_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
allocator_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
arith_uint256_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
base32_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
base58_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
base64_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
bctest.py [qa] py2: Unfiddle strings into bytes explicitly 2016-04-15 09:55:12 +02:00
bip32_tests.cpp HD wallet (#1405) 2017-05-29 14:51:40 +03:00
bip39_tests.cpp HD wallet (#1405) 2017-05-29 14:51:40 +03:00
bitcoin-util-test.py
bloom_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
bswap_tests.cpp fixed protobuf 3.0 (byteswap) issue on macOS (#1370) 2017-02-28 13:00:02 +04:00
buildenv.py.in
cachemap_tests.cpp bump copyright notice to 2017 (#1207) 2016-12-20 17:26:45 +04:00
cachemultimap_tests.cpp bump copyright notice to 2017 (#1207) 2016-12-20 17:26:45 +04:00
checkblock_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
coins_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
compress_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
crypto_tests.cpp HD wallet (#1405) 2017-05-29 14:51:40 +03:00
dbwrapper_tests.cpp Merge remote-tracking branch 'bitcoin/0.12' into mergebtc12, fix/dashify 2016-08-26 04:09:20 +03:00
DoS_tests.cpp Backport Bitcoin PR#9609: net: fix remaining net assertions (#1575) + Dashify 2017-08-17 21:37:22 +03:00
getarg_tests.cpp more bitcoin->dash 2016-03-04 12:09:03 +03:00
governance_validators_tests.cpp Validate proposals on prepare and submit (#1488) 2017-06-26 16:56:29 +03:00
hash_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
key_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
limitedmap_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
main_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
Makefile
mempool_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
merkle_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
miner_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
multisig_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
net_tests.cpp Backport Bitcoin PR#8085: p2p: Begin encapsulation (#1537) 2017-07-21 12:35:19 +03:00
netbase_tests.cpp bump copyright notice to 2017 (#1207) 2016-12-20 17:26:45 +04:00
pmt_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
policyestimator_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
pow_tests.cpp Fixed pow (test and algo) (#1415) 2017-04-11 13:55:07 +03:00
prevector_tests.cpp Minimal fix to slow prevector tests as stopgap measure 2017-05-12 00:58:36 +03:00
ratecheck_tests.cpp bump copyright notice to 2017 (#1207) 2016-12-20 17:26:45 +04:00
README.md Merge #945: More dash->dashcore 2016-08-19 05:46:30 -06:00
reverselock_tests.cpp c++11: don't throw from the reverselock destructor (#1421) 2017-04-11 13:55:41 +03:00
rpc_tests.cpp Replace watchdogs with ping (#1491) 2017-07-04 20:31:57 +03:00
rpc_wallet_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
sanity_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
scheduler_tests.cpp Merge remote-tracking branch 'bitcoin/0.12' into mergebtc12, fix/dashify 2016-08-26 04:09:20 +03:00
script_P2PKH_tests.cpp fix tests 2016-07-19 11:15:54 +03:00
script_P2SH_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
script_tests.cpp Rename bitcoinconsensus library to dashconsensus. (#1432) 2017-04-15 09:29:09 +02:00
scriptnum10.h Bump copyright headers to 2015 2016-01-05 14:13:33 +01:00
scriptnum_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
serialize_tests.cpp Backport Bitcoin PR#8708: net: have CConnman handle message sending (#1553) 2017-07-27 17:28:05 +03:00
sighash_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
sigopcount_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
skiplist_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
streams_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
test_dash.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
test_dash.h Backport Bitcoin PR#8085: p2p: Begin encapsulation (#1537) 2017-07-21 12:35:19 +03:00
timedata_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
transaction_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
txvalidationcache_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00
uint256_tests.cpp Fix tests 2016-03-04 06:52:57 +01:00
univalue_tests.cpp fix annoying compiler warnings (#1204) 2016-12-14 17:33:46 +04:00
util_tests.cpp Replace watchdogs with ping (#1491) 2017-07-04 20:31:57 +03:00
versionbits_tests.cpp Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) 2017-08-09 03:19:06 +03:00

Notes

The sources in this directory are unit test cases. Boost includes a unit testing framework, and since Dash Core already uses boost, it makes sense to simply use this framework rather than require developers to configure some other framework (we want as few impediments to creating 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, which simply includes other files that contain the actual unit tests (outside of a couple required preprocessor directives). 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 "<source_filename>_tests.cpp" and such files should wrap their tests in a test suite called "<source_filename>_tests". For an examples of this pattern, examine uint160_tests.cpp and uint256_tests.cpp.

Add the source files to /src/Makefile.test.include to add them to the build.

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/.

test_dash has some built-in command-line arguments; for example, to run just the getarg_tests verbosely:

test_dash --log_level=all --run_test=getarg_tests

... or to run just the doubledash test:

test_dash --run_test=getarg_tests/doubledash

Run test_dash --help for the full list.