//go:build integration package itest import ( "fmt" "github.com/lightningnetwork/lnd/lntest" ) var allTestCases = []*lntest.TestCase{ { Name: "update channel status", TestFunc: testUpdateChanStatus, }, { Name: "external channel funding", TestFunc: testExternalFundingChanPoint, }, { Name: "channel backup restore unconfirmed", TestFunc: testChannelBackupRestoreUnconfirmed, }, { Name: "channel backup restore force close", TestFunc: testChannelBackupRestoreForceClose, }, { Name: "channel backup restore legacy", TestFunc: testChannelBackupRestoreLegacy, }, { Name: "data loss protection", TestFunc: testDataLossProtection, }, { Name: "send all coins", TestFunc: testSendAllCoins, }, { Name: "send selected coins", TestFunc: testSendSelectedCoins, }, { Name: "send selected coins channel reserve", TestFunc: testSendSelectedCoinsChannelReserve, }, { Name: "disconnecting target peer", TestFunc: testDisconnectingTargetPeer, }, { Name: "sphinx replay persistence", TestFunc: testSphinxReplayPersistence, }, { Name: "funding expiry blocks on pending", TestFunc: testFundingExpiryBlocksOnPending, }, { Name: "list channels", TestFunc: testListChannels, }, { Name: "max pending channel", TestFunc: testMaxPendingChannels, }, { Name: "garbage collect link nodes", TestFunc: testGarbageCollectLinkNodes, }, { Name: "reject onward htlc", TestFunc: testRejectHTLC, }, { Name: "node sign verify", TestFunc: testNodeSignVerify, }, { Name: "list addresses", TestFunc: testListAddresses, }, { Name: "abandonchannel", TestFunc: testAbandonChannel, }, { Name: "recovery info", TestFunc: testGetRecoveryInfo, }, { Name: "onchain fund recovery", TestFunc: testOnchainFundRecovery, }, { Name: "wallet rescan address detection", TestFunc: testRescanAddressDetection, }, { Name: "basic funding flow with all input types", TestFunc: testChannelFundingInputTypes, }, { Name: "unconfirmed channel funding", TestFunc: testUnconfirmedChannelFunding, }, { Name: "funding flow persistence", TestFunc: testChannelFundingPersistence, }, { Name: "batch channel funding", TestFunc: testBatchChanFunding, }, { Name: "open channel with unstable utxos", TestFunc: testChannelFundingWithUnstableUtxos, }, { Name: "open psbt channel with unstable utxos", TestFunc: testPsbtChanFundingWithUnstableUtxos, }, { Name: "update channel policy", TestFunc: testUpdateChannelPolicy, }, { Name: "send update disable channel", TestFunc: testSendUpdateDisableChannel, }, { Name: "connection timeout", TestFunc: testNetworkConnectionTimeout, }, { Name: "reconnect after ip change", TestFunc: testReconnectAfterIPChange, }, { Name: "addpeer config", TestFunc: testAddPeerConfig, }, { Name: "private channel update policy", TestFunc: testUpdateChannelPolicyForPrivateChannel, }, { Name: "update channel policy fee rate accuracy", TestFunc: testUpdateChannelPolicyFeeRateAccuracy, }, { Name: "unannounced channels", TestFunc: testUnannouncedChannels, }, { Name: "graph topology notifications", TestFunc: testGraphTopologyNotifications, }, { Name: "node announcement", TestFunc: testNodeAnnouncement, }, { Name: "update node announcement rpc", TestFunc: testUpdateNodeAnnouncement, }, { Name: "list payments", TestFunc: testListPayments, }, { Name: "send direct payment anchor", TestFunc: testSendDirectPaymentAnchor, }, { Name: "send direct payment simple taproot", TestFunc: testSendDirectPaymentSimpleTaproot, }, { Name: "immediate payment after channel opened", TestFunc: testPaymentFollowingChannelOpen, }, { Name: "payment failure reason canceled", TestFunc: testPaymentFailureReasonCanceled, }, { Name: "invoice update subscription", TestFunc: testInvoiceSubscriptions, }, { Name: "streaming channel backup update", TestFunc: testChannelBackupUpdates, }, { Name: "export channel backup", TestFunc: testExportChannelBackup, }, { Name: "channel balance", TestFunc: testChannelBalance, }, { Name: "channel unsettled balance", TestFunc: testChannelUnsettledBalance, }, { Name: "channel force closure anchor", TestFunc: testChannelForceClosureAnchor, }, { Name: "channel force closure simple taproot", TestFunc: testChannelForceClosureSimpleTaproot, }, { Name: "failing channel", TestFunc: testFailingChannel, }, { Name: "chain kit", TestFunc: testChainKit, }, { Name: "neutrino kit", TestFunc: testNeutrino, }, { Name: "etcd failover", TestFunc: testEtcdFailover, }, { Name: "leader health check", TestFunc: testLeaderHealthCheck, }, { Name: "hold invoice force close", TestFunc: testHoldInvoiceForceClose, }, { Name: "hold invoice sender persistence", TestFunc: testHoldInvoicePersistence, }, { Name: "maximum channel size", TestFunc: testMaxChannelSize, }, { Name: "wumbo channels", TestFunc: testWumboChannels, }, { Name: "max htlc pathfind", TestFunc: testMaxHtlcPathfind, }, { Name: "multi-hop htlc error propagation", TestFunc: testHtlcErrorPropagation, }, { Name: "multi-hop payments", TestFunc: testMultiHopPayments, }, { Name: "estimate route fee", TestFunc: testEstimateRouteFee, }, { Name: "anchors reserved value", TestFunc: testAnchorReservedValue, }, { Name: "3rd party anchor spend", TestFunc: testAnchorThirdPartySpend, }, { Name: "open channel reorg test", TestFunc: testOpenChannelAfterReorg, }, { Name: "sign psbt", TestFunc: testSignPsbt, }, { Name: "fund psbt", TestFunc: testFundPsbt, }, { Name: "resolution handoff", TestFunc: testResHandoff, }, { Name: "REST API", TestFunc: testRestAPI, }, { Name: "revoked uncooperative close retribution", TestFunc: testRevokedCloseRetribution, }, { Name: "revoked uncooperative close retribution zero value " + "remote output", TestFunc: testRevokedCloseRetributionZeroValueRemoteOutput, }, { Name: "revoked uncooperative close retribution remote hodl", TestFunc: testRevokedCloseRetributionRemoteHodl, }, { Name: "multi-hop send to route", TestFunc: testMultiHopSendToRoute, }, { Name: "send to route error propagation", TestFunc: testSendToRouteErrorPropagation, }, { Name: "private channels", TestFunc: testPrivateChannels, }, { Name: "invoice routing hints", TestFunc: testInvoiceRoutingHints, }, { Name: "scid alias routing hints", TestFunc: testScidAliasRoutingHints, }, { Name: "multi-hop payments over private channels", TestFunc: testMultiHopOverPrivateChannels, }, { Name: "query routes", TestFunc: testQueryRoutes, }, { Name: "route fee cutoff", TestFunc: testRouteFeeCutoff, }, { Name: "route fee limit after queryroutes", TestFunc: testFeeLimitAfterQueryRoutes, }, { Name: "rpc middleware interceptor", TestFunc: testRPCMiddlewareInterceptor, }, { Name: "macaroon authentication", TestFunc: testMacaroonAuthentication, }, { Name: "bake macaroon", TestFunc: testBakeMacaroon, }, { Name: "delete macaroon id", TestFunc: testDeleteMacaroonID, }, { Name: "stateless init", TestFunc: testStatelessInit, }, { Name: "single hop invoice", TestFunc: testSingleHopInvoice, }, { Name: "wipe forwarding packages", TestFunc: testWipeForwardingPackages, }, { Name: "switch circuit persistence", TestFunc: testSwitchCircuitPersistence, }, { Name: "switch offline delivery", TestFunc: testSwitchOfflineDelivery, }, { Name: "switch offline delivery persistence", TestFunc: testSwitchOfflineDeliveryPersistence, }, { Name: "switch offline delivery outgoing offline", TestFunc: testSwitchOfflineDeliveryOutgoingOffline, }, { Name: "sendtoroute multi path payment", TestFunc: testSendToRouteMultiPath, }, { Name: "send multi path payment", TestFunc: testSendMultiPathPayment, }, { Name: "sendpayment amp invoice", TestFunc: testSendPaymentAMPInvoice, }, { Name: "sendpayment amp invoice repeat", TestFunc: testSendPaymentAMPInvoiceRepeat, }, { Name: "send payment amp", TestFunc: testSendPaymentAMP, }, { Name: "sendtoroute amp", TestFunc: testSendToRouteAMP, }, { Name: "forward interceptor dedup htlcs", TestFunc: testForwardInterceptorDedupHtlc, }, { Name: "forward interceptor", TestFunc: testForwardInterceptorBasic, }, { Name: "forward interceptor modified htlc", TestFunc: testForwardInterceptorModifiedHtlc, }, { Name: "forward interceptor wire records", TestFunc: testForwardInterceptorWireRecords, }, { Name: "forward interceptor restart", TestFunc: testForwardInterceptorRestart, }, { Name: "invoice HTLC modifier basic", TestFunc: testInvoiceHtlcModifierBasic, }, { Name: "zero conf channel open", TestFunc: testZeroConfChannelOpen, }, { Name: "option scid alias", TestFunc: testOptionScidAlias, }, { Name: "scid alias upgrade", TestFunc: testOptionScidUpgrade, }, { Name: "nonstd sweep", TestFunc: testNonstdSweep, }, { Name: "multiple channel creation and update subscription", TestFunc: testBasicChannelCreationAndUpdates, }, { Name: "derive shared key", TestFunc: testDeriveSharedKey, }, { Name: "sign output raw", TestFunc: testSignOutputRaw, }, { Name: "sign verify message", TestFunc: testSignVerifyMessage, }, { Name: "bumpfee", TestFunc: testBumpFee, }, { Name: "bumpforceclosefee", TestFunc: testBumpForceCloseFee, }, { Name: "taproot spend", TestFunc: testTaprootSpend, }, { Name: "taproot musig2", TestFunc: testTaprootMuSig2, }, { Name: "taproot import scripts", TestFunc: testTaprootImportScripts, }, { Name: "simple taproot channel activation", TestFunc: testSimpleTaprootChannelActivation, }, { Name: "wallet import pubkey", TestFunc: testWalletImportPubKey, }, { Name: "async payments benchmark", TestFunc: testAsyncPayments, }, { Name: "taproot coop close", TestFunc: testTaprootCoopClose, }, { Name: "trackpayments", TestFunc: testTrackPayments, }, { Name: "trackpayments compatible", TestFunc: testTrackPaymentsCompatible, }, { Name: "custom message", TestFunc: testCustomMessage, }, { Name: "sign verify message with addr", TestFunc: testSignVerifyMessageWithAddr, }, { Name: "zero conf reorg edge existence", TestFunc: testZeroConfReorg, }, { Name: "async bidirectional payments", TestFunc: testBidirectionalAsyncPayments, }, { Name: "lookup htlc resolution", TestFunc: testLookupHtlcResolution, }, { Name: "channel fundmax error", TestFunc: testChannelFundMaxError, }, { Name: "channel fundmax wallet amount", TestFunc: testChannelFundMaxWalletAmount, }, { Name: "channel fundmax anchor reserve", TestFunc: testChannelFundMaxAnchorReserve, }, { Name: "htlc timeout resolver extract preimage remote", TestFunc: testHtlcTimeoutResolverExtractPreimageRemote, }, { Name: "htlc timeout resolver extract preimage local", TestFunc: testHtlcTimeoutResolverExtractPreimageLocal, }, { Name: "custom features", TestFunc: testCustomFeatures, }, { Name: "update pending open channels on funder side", TestFunc: testUpdateOnFunderPendingOpenChannels, }, { Name: "update pending open channels on fundee side", TestFunc: testUpdateOnFundeePendingOpenChannels, }, { Name: "blinded payment htlc re-forward", TestFunc: testBlindedPaymentHTLCReForward, }, { Name: "query blinded route", TestFunc: testQueryBlindedRoutes, }, { Name: "route blinding invoices", TestFunc: testBlindedRouteInvoices, }, { Name: "receiver blinded error", TestFunc: testReceiverBlindedError, }, { Name: "relayer blinded error", TestFunc: testRelayingBlindedError, }, { Name: "introduction blinded error", TestFunc: testIntroductionNodeError, }, { Name: "disable introduction node", TestFunc: testDisableIntroductionNode, }, { Name: "on chain to blinded", TestFunc: testErrorHandlingOnChainFailure, }, { Name: "mpp to single blinded path", TestFunc: testMPPToSingleBlindedPath, }, { Name: "mpp to multiple blinded paths", TestFunc: testMPPToMultipleBlindedPaths, }, { Name: "route blinding dummy hops", TestFunc: testBlindedRouteDummyHops, }, { Name: "removetx", TestFunc: testRemoveTx, }, { Name: "listsweeps", TestFunc: testListSweeps, }, { Name: "fail funding flow psbt", TestFunc: testPsbtChanFundingFailFlow, }, { Name: "coop close with htlcs", TestFunc: testCoopCloseWithHtlcs, }, { Name: "open channel locked balance", TestFunc: testOpenChannelLockedBalance, }, { Name: "nativesql no migration", TestFunc: testNativeSQLNoMigration, }, { Name: "sweep cpfp anchor outgoing timeout", TestFunc: testSweepCPFPAnchorOutgoingTimeout, }, { Name: "sweep cpfp anchor incoming timeout", TestFunc: testSweepCPFPAnchorIncomingTimeout, }, { Name: "sweep htlcs", TestFunc: testSweepHTLCs, }, { Name: "sweep commit output and anchor", TestFunc: testSweepCommitOutputAndAnchor, }, { Name: "coop close with external delivery", TestFunc: testCoopCloseWithExternalDelivery, }, { Name: "payment failed htlc local swept", TestFunc: testPaymentFailedHTLCLocalSwept, }, { Name: "payment failed htlc local swept resumed", TestFunc: testPaymentFailedHTLCLocalSweptResumed, }, { Name: "payment succeeded htlc remote swept", TestFunc: testPaymentSucceededHTLCRemoteSwept, }, { Name: "send to route failed htlc timeout", TestFunc: testSendToRouteFailHTLCTimeout, }, { Name: "send to route failed htlc timeout resumed", TestFunc: testSendToRouteFailHTLCTimeoutResumed, }, { Name: "debuglevel show", TestFunc: testDebuglevelShow, }, { Name: "experimental endorsement", TestFunc: testExperimentalEndorsement, }, { Name: "quiescence", TestFunc: testQuiescence, }, } // appendPrefixed is used to add a prefix to each test name in the subtests // before appending them to the main test cases. func appendPrefixed(prefix string, testCases, subtestCases []*lntest.TestCase) []*lntest.TestCase { for _, tc := range subtestCases { name := fmt.Sprintf("%s-%s", prefix, tc.Name) testCases = append(testCases, &lntest.TestCase{ Name: name, TestFunc: tc.TestFunc, }) } return testCases } func init() { // Register subtests. allTestCases = appendPrefixed( "multihop", allTestCases, multiHopForceCloseTestCases, ) allTestCases = appendPrefixed( "watchtower", allTestCases, watchtowerTestCases, ) allTestCases = appendPrefixed( "psbt", allTestCases, psbtFundingTestCases, ) allTestCases = appendPrefixed( "remote signer", allTestCases, remoteSignerTestCases, ) allTestCases = appendPrefixed( "channel backup", allTestCases, channelRestoreTestCases, ) allTestCases = appendPrefixed( "utxo selection", allTestCases, fundUtxoSelectionTestCases, ) allTestCases = appendPrefixed( "zero conf", allTestCases, zeroConfPolicyTestCases, ) allTestCases = appendPrefixed( "channel fee policy", allTestCases, channelFeePolicyTestCases, ) allTestCases = appendPrefixed( "wallet import account", allTestCases, walletImportAccountTestCases, ) allTestCases = appendPrefixed( "funding", allTestCases, basicFundingTestCases, ) allTestCases = appendPrefixed( "send to route", allTestCases, sendToRouteTestCases, ) // Prepare the test cases for windows to exclude some of the flaky // ones. // // NOTE: We need to run this before the isWindowsOS check to make sure // the excluded tests are found in allTestCases. Otherwise, if a // non-existing test is included in excludedTestsWindows, we won't be // able to find it until it's pushed to the CI, which creates a much // longer feedback loop. windowsTestCases := filterWindowsFlakyTests() // If this is Windows, we'll skip running some of the flaky tests. if isWindowsOS() { allTestCases = windowsTestCases } }