lnd/itest
Yong 939375f1a5
sweeper: relax anchor sweeping when there's no deadline pressure (#7965)
* sweep: use longer variable name for clarity in `addToState`

* sweeper: add more docs and debug logs

* sweep: prioritize smaller inputs when adding wallet UTXOs

This commit sorts wallet UTXOs by their values when using them for
sweeping inputs. This way we'd avoid locking large UTXOs when sweeping
inputs and also provide an opportunity to aggregate wallet UTXOs.

* contractcourt+itest: relax anchor sweeping for CPFP purpose

This commit changes from always sweeping anchor for a local force close
to only do so when there is an actual time pressure. After this change,
a forced anchor sweeping will only be attempted when the deadline is
less than 144 blocks.

* docs: update release notes

* itest: update test `testMultiHopHtlcLocalChainClaim` to skip CPFP

Since we now only perform CPFP when both the fee rate is higher and the
deadline is less than 144, we need to update the test to reflect that
Bob will not CPFP the force close tx for the channle Alice->Bob.

* itest: fix `testMultiHopRemoteForceCloseOnChainHtlcTimeout`

* itest: update related tests to reflect anchor sweeping

This commit updates all related tests to reflect the latest anchor
sweeping behavior. Previously, anchor sweeping is always attempted as
CPFP when a force close is broadcast, while now it only happens when the
deadline is less than 144. For non-CPFP purpose sweeping, it will happen
after one block is mined after the force close transaction is confirmed
as the anchor will be resent to the sweeper with a floor fee rate, hence
making it economical to sweep.
2023-10-12 17:18:59 +02:00
..
list_off_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
list_on_test.go lntest/itest: add coverage for querying routes to blinded paths 2023-10-06 16:38:33 -07:00
lnd_amp_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_channel_backup_test.go sweeper: relax anchor sweeping when there's no deadline pressure (#7965) 2023-10-12 17:18:59 +02:00
lnd_channel_balance_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_channel_force_close_test.go sweeper: relax anchor sweeping when there's no deadline pressure (#7965) 2023-10-12 17:18:59 +02:00
lnd_channel_funding_fund_max_test.go build: update lnd sub modules, and btcd + btcutil 2023-09-11 20:35:06 -07:00
lnd_channel_funding_utxo_selection_test.go build: update lnd sub modules, and btcd + btcutil 2023-09-11 20:35:06 -07:00
lnd_channel_graph_test.go multi: update node announcement features in feature manager first 2023-05-04 10:35:46 -04:00
lnd_channel_policy_test.go itest+lntest: add a dedicated timeout for sending payments 2023-02-23 21:56:11 +08:00
lnd_custom_features.go itest: add coverage for custom features 2023-05-04 10:42:17 -04:00
lnd_custom_message_test.go itest: move lnd_custom_{message => message_test}.go 2023-04-18 09:40:18 +02:00
lnd_etcd_failover_test.go multi: update linter, fix new issues 2023-06-13 11:58:33 +02:00
lnd_forward_interceptor_test.go itest: add missing topology check in tests 2023-02-23 21:56:10 +08:00
lnd_funding_test.go itest: add itest for externally funded taproot chans 2023-09-26 21:45:17 +02:00
lnd_hold_invoice_force_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_hold_persistence_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_htlc_test.go itest+lntest: make sure states are cleaned when tests end 2023-03-15 00:01:40 +08:00
lnd_macaroons_test.go mod+cmd/lncli: use google.golang.org/protobuf package 2023-05-11 22:51:16 +02:00
lnd_max_channel_size_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_max_htlcs_test.go cmd+lntest: use the new rpc field Payment_INITIATED 2023-10-06 16:34:47 -07:00
lnd_misc_test.go htlcswitch/hop: use InvalidOnionVersion for replayed packets (#7937) 2023-10-11 10:08:43 +02:00
lnd_mpp_test.go itest: make sure edges are updated in mpp tests 2023-05-20 00:33:56 +08:00
lnd_multi-hop_test.go sweeper: relax anchor sweeping when there's no deadline pressure (#7965) 2023-10-12 17:18:59 +02:00
lnd_multi-hop-error-propagation_test.go itest: fix make lint 2023-02-23 21:56:10 +08:00
lnd_multi-hop-payments_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_network_test.go itest: bind to local addr in network test 2023-07-24 08:47:26 -03:00
lnd_neutrino_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_no_etcd_dummy_failover_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_nonstd_sweep_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_onchain_test.go sweeper: relax anchor sweeping when there's no deadline pressure (#7965) 2023-10-12 17:18:59 +02:00
lnd_open_channel_test.go multi: add itest to check race between channel_ready and update_add_htlc 2023-08-09 01:29:19 +08:00
lnd_payment_test.go itest: add testSendDirectPayment 2023-09-28 19:42:11 +08:00
lnd_psbt_test.go itest: unify PSBT channel funding tests, add taproot 2023-08-29 10:57:38 +02:00
lnd_recovery_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_remote_signer_test.go itest: add remote signer test case for taproot chans 2023-09-18 11:42:20 -07:00
lnd_res_handoff_test.go multi: update linter, fix new issues 2023-06-13 11:58:33 +02:00
lnd_rest_api_test.go mod+cmd/lncli: use google.golang.org/protobuf package 2023-05-11 22:51:16 +02:00
lnd_revocation_test.go itest: use explicit chan type negotiation for taproot chan cases 2023-08-22 16:34:31 -07:00
lnd_route_blinding.go lntest: add coverage for single hop blinded route query routes 2023-10-06 16:38:33 -07:00
lnd_routing_test.go multi: update linter, fix new issues 2023-06-13 11:58:33 +02:00
lnd_rpc_middleware_interceptor_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_send_multi_path_payment_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_signer_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_single_hop_invoice_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_switch_test.go itest: cleanup channels for testSwitchOfflineDeliveryOutgoingOffline 2023-05-20 00:33:56 +08:00
lnd_taproot_test.go itest: fix make lint 2023-02-23 21:56:10 +08:00
lnd_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_trackpayments_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_wallet_import_test.go walletrpc+btcwallet: no custom account with various key scopes 2023-06-14 09:58:53 +02:00
lnd_watchtower_test.go lntest/itest: add session deletion itest 2023-03-20 16:51:51 +02:00
lnd_wipe_fwdpkgs_test.go multi: update linter, fix new issues 2023-06-13 11:58:33 +02:00
lnd_wumbo_channels_test.go itest+lntest: migrate lntemp to lntest 2023-02-23 21:56:09 +08:00
lnd_zero_conf_test.go itest+lntest: add helper methods to manage temp miners 2023-06-19 14:04:24 +08:00
log_check_errors.sh multi: move itest out of lntest 2023-02-23 21:56:08 +08:00
log_substitutions.txt lntest/itest: adds tests for fundmax flag of cli:openchannel 2023-04-05 23:09:12 +02:00
README.md itest: add readme 2023-02-23 21:56:12 +08:00

Integration Test

itest is a package that houses the integration tests made for lnd. This package builds test cases using the test framework lntest.

Add New Tests

To add a new test case, create a TestFunc and add it in list_on_test.go. Ideally, the Name should just be the snake case of the name used in TestFunc without the leading test and underscores. For instance, to test lnd's exporting channel backup, we have,

{
		Name:     "export channel backup",
		TestFunc: testExportChannelBackup,
}

The place to put the code of the TestFunc is case-specific. itest package has loosely defined a list of files to test different functionalities of lnd. The new test needs to be put into one of these files, otherwise, a new file needs to be created.

Run Tests

Run a single test case

To run a single test case, use make itest icase=$case, where case is the name defined in list_on_test.go, with spaces replaced with underscores(_).

# Run `testListChannels`.
make itest icase=list_channels

Run multiple test cases

There are two ways to run multiple test cases. One way is to use make itest icase=$cases, where cases has the format cases='(case|case|...)'. The case is the name defined in list_on_test.go, with spaces replaced with underscores(_).

# Run `testListChannels` and `testListAddresses` together.
make itest icase='(list_channels|list_addresses)'

Another way to run multiple cases is similar to how Go runs its tests - by simple regex matching. For instance, the following command will run three cases since they all start with the word list,

# Run `testListChannels`, `testListAddresses`, and `testListPayments` together.
make itest icase=list

Run all tests

To run all tests, use make itest without icase flag.

# Run all test cases.
make itest

Run tests in parallel

To run tests in parallel, use make itest-parallel. This command takes two special arguments,

  • tranches, specifies the number of parts the test cases will be split into.
  • parallel, specifies the number of threads to run in parallel. This value must be smaller than or equal to tranches.
# Split the tests into 4 parts, and run them using 2 threads.
make itest-parallel tranches=4 parallel=2

By default, itest-parallel splits the tests into 4 parts and uses 4 threads to run each of them.

Additional arguments

For both make itest and make itest-parallel, the following arguments are allowed,

  • timeout, specifies the timeout value used in testing.
  • dbbackend, specifies the database backend. Must be bbolt, etcd, or postgres, default to bbolt.
  • backend, specifies the chain backend to be used. Must be one of,
    • btcd, the default value.
    • neutrino
    • bitcoind
    • bitcoind notxindex
    • bitcoind rpcpolling
# Run a single test case using bitcoind as the chain backend and etcd as the
# database backend, with a timeout of 5 minutes.
make itest icase=list_channels backend=bitcoind dbbackend=etcd timeout=5m

# Run all test cases in parallel, using bitcoind notxindex as the chain backend
# and etcd as the database backend, with a timeout of 60 minutes for each
# parallel.
make itest-parallel backend="bitcoind notxindex" dbbackend=etcd timeout=60m