neobytes/qa/rpc-tests
Gregory Maxwell aaf55d25c6
Add a -rpckeepalive and disable RPC use of HTTP persistent connections.
It turns out that some miners have been staying with old versions of
 Bitcoin Core because their software  behaves poorly with persistent
 connections and the Bitcoin Core thread and connection limits.

What happens is that underlying  HTTP libraries leave connections open
 invisibly to their users and then the user runs into the default four
 thread limit.  This looks like Bitcoin Core is unresponsive to RPC.

There are many things that should be improved in Bitcoin Core's behavior
 here, e.g. supporting more concurrent connections, not tying up threads
 for idle connections, disconnecting kept-alive  connections when limits
 are reached, etc. All are fairly big, risky changes.

Disabling keep-alive is a simple workaround. It's often not easy to turn
 off the keep-alive support in the client where it may be buried in some
 platform library.

If you are one of the few who really needs persistent connections you
 probably know that you want them and can find a switch; while if you
 don't and the misbehavior is hitting you it is hard to discover the
 source of your problems is keepalive related.  Given that it is best
 to default to off until they're handled better.

Github-Merge: #5655
Rebased-From: 16a5c18cea 56c1093dae 1dd8ee72af
2015-01-15 09:38:24 +01:00
..
python-bitcoinrpc Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
.gitignore Python-based regression tests 2014-02-28 15:24:31 -05:00
conflictedbalance.sh tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment 2014-10-31 00:05:55 -04:00
forknotify.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
getblocktemplate_longpoll.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
getblocktemplate_proposals.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
getchaintips.py Merge pull request #5386 2014-12-01 11:49:35 +01:00
httpbasics.py Add a -rpckeepalive and disable RPC use of HTTP persistent connections. 2015-01-15 09:38:24 +01:00
keypool.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
listtransactions.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
mempool_coinbase_spends.py RPC-test based on invalidateblock for mempool coinbase spends 2014-12-08 14:09:58 -08:00
mempool_resurrect_test.py Fix missing python2 in rpc-tests 2014-12-05 16:04:05 -08:00
mempool_spendcoinbase.py Fix missing python2 in rpc-tests 2014-12-05 16:04:05 -08:00
netutil.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
README.md Refactor common RPC test code to BitcoinTestFramework base class 2014-07-09 10:19:26 -04:00
receivedby.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
rest.py [REST] /rest/block response with full tx details 2014-12-09 16:05:50 +01:00
rpcbind_test.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
send.sh Update license in pull-tester and rpc-tests 2014-10-23 09:48:19 +08:00
smartfees.py Fix smartfees test for change to relay policy 2015-01-08 11:45:26 +01:00
test_framework.py Add a -rpckeepalive and disable RPC use of HTTP persistent connections. 2015-01-15 09:38:24 +01:00
txn_doublespend.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
util.py Coinbases-in-mempool regression test 2014-12-02 19:07:39 -05:00
util.sh Update license in pull-tester and rpc-tests 2014-10-23 09:48:19 +08:00
wallet.py Fix python usage for arch's broken maintainers 2014-11-27 00:02:28 -05:00
walletbackup.py Port of walletbackup.sh to Python. 2014-12-09 10:57:51 +01:00
zapwallettxes.sh tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment 2014-10-31 00:05:55 -04:00

Regression tests of RPC interface

python-bitcoinrpc

Git subtree of https://github.com/jgarzik/python-bitcoinrpc. Changes to python-bitcoinrpc should be made upstream, and then pulled here using git subtree.

test_framework.py

Base class for new regression tests.

listtransactions.py

Tests for the listtransactions RPC call.

util.py

Generally useful functions.

Bash-based tests, to be ported to Python:

  • wallet.sh : Exercise wallet send/receive code.
  • walletbackup.sh : Exercise wallet backup / dump / import
  • txnmall.sh : Test proper accounting of malleable transactions
  • conflictedbalance.sh : More testing of malleable transaction handling

Notes

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*50=1250 BTC) in their 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:

rm -rf cache
killall bitcoind