lbrycrd/qa
John Newbery 6d07c62322 Return correct error codes in bumpfee().
The bumpfee() RPC was returning misleading or incorrect error codes
(for example RPC_INVALID_ADDRESS_OR_KEY when the transaction was not
BIP125 replacable). This commit fixes those error codes:

- RPC_INVALID_ADDRESS_OR_KEY if an invalid address was provided:
    - Invalid change address given
- RPC_INVALID_PARAMETER if a single (non-address/key) parameter is incorrect
    - confTarget and totalFee options should not both be set.
    - Invalid confTarget
    - Insufficient totalFee (cannot be less than required fee)
- RPC_WALLET_ERROR for any other error
    - Transaction has descendants in the wallet
    - Transaction has descendants in the mempool
    - Transaction has been mined, or is conflicted with a mined transaction
    - Transaction is not BIP 125 replaceable
    - Transaction has already been bumped
    - Transaction contains inputs that don't belong to the wallet
    - Transaction has multiple change outputs
    - Transaction does not have a change output
    - Fee is higher than maxTxFee
    - New fee rate is less than the minimum fee rate
    - Change output is too small.

This commit also updates the test cases to explicitly test the error code.
2017-03-07 16:45:09 -05:00
..
pull-tester Merge #9823: qa: Set correct path for binaries in rpc tests 2017-02-23 17:36:02 +01:00
rpc-tests Return correct error codes in bumpfee(). 2017-03-07 16:45:09 -05:00
README.md [qa][doc] Correct rpc test options in readme 2017-02-20 09:45:32 +08:00

The pull-tester folder contains a script to call multiple tests from the rpc-tests folder.

Every pull request to the bitcoin 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 <testname>

Or you can run any combination of tests by calling

qa/pull-tester/rpc-tests.py <testname1> <testname2> <testname3> ...

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 bitcoinds and test.* datadir on exit or error
  --noshutdown          Don't stop bitcoinds after the test execution
  --srcdir=SRCDIR       Source directory containing bitcoind/bitcoin-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*50=1250 BTC) 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:

rm -rf cache
killall bitcoind

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.