tests: extend tests to also test resuming with HTLC v2

pull/291/head
Andras Banki-Horvath 4 years ago committed by András Bánki-Horváth
parent 133f3cac5f
commit 98bdbcddfb

@ -12,6 +12,7 @@ import (
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightninglabs/lndclient" "github.com/lightninglabs/lndclient"
"github.com/lightninglabs/loop/loopdb" "github.com/lightninglabs/loop/loopdb"
"github.com/lightninglabs/loop/swap"
"github.com/lightninglabs/loop/test" "github.com/lightninglabs/loop/test"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lntypes"
@ -68,7 +69,7 @@ func TestSuccess(t *testing.T) {
testSuccess(ctx, testRequest.Amount, info.SwapHash, testSuccess(ctx, testRequest.Amount, info.SwapHash,
signalPrepaymentResult, signalSwapPaymentResult, false, signalPrepaymentResult, signalSwapPaymentResult, false,
confIntent, confIntent, swap.HtlcV2,
) )
} }
@ -150,22 +151,46 @@ func TestResume(t *testing.T) {
defaultConfs := loopdb.DefaultLoopOutHtlcConfirmations defaultConfs := loopdb.DefaultLoopOutHtlcConfirmations
t.Run("not expired", func(t *testing.T) { storedVersion := []loopdb.ProtocolVersion{
testResume(t, defaultConfs, false, false, true) loopdb.ProtocolVersionUnrecorded,
}) loopdb.ProtocolVersionHtlcV2,
t.Run("not expired, custom confirmations", func(t *testing.T) { }
testResume(t, 3, false, false, true)
}) for _, version := range storedVersion {
t.Run("expired not revealed", func(t *testing.T) { version := version
testResume(t, defaultConfs, true, false, false)
}) t.Run(version.String(), func(t *testing.T) {
t.Run("expired revealed", func(t *testing.T) { t.Run("not expired", func(t *testing.T) {
testResume(t, defaultConfs, true, true, true) testResume(
}) t, defaultConfs, false, false, true,
version,
)
})
t.Run("not expired, custom confirmations",
func(t *testing.T) {
testResume(
t, 3, false, false, true,
version,
)
})
t.Run("expired not revealed", func(t *testing.T) {
testResume(
t, defaultConfs, true, false, false,
version,
)
})
t.Run("expired revealed", func(t *testing.T) {
testResume(
t, defaultConfs, true, true, true,
version,
)
})
})
}
} }
func testResume(t *testing.T, confs uint32, expired, preimageRevealed, func testResume(t *testing.T, confs uint32, expired, preimageRevealed,
expectSuccess bool) { expectSuccess bool, protocolVersion loopdb.ProtocolVersion) {
defer test.Guard(t)() defer test.Guard(t)()
@ -222,6 +247,7 @@ func testResume(t *testing.T, confs uint32, expired, preimageRevealed,
SenderKey: senderKey, SenderKey: senderKey,
MaxSwapFee: 60000, MaxSwapFee: 60000,
MaxMinerFee: 50000, MaxMinerFee: 50000,
ProtocolVersion: protocolVersion,
}, },
}, },
Loop: loopdb.Loop{ Loop: loopdb.Loop{
@ -250,6 +276,15 @@ func testResume(t *testing.T, confs uint32, expired, preimageRevealed,
// Expect client to register for our expected number of confirmations. // Expect client to register for our expected number of confirmations.
confIntent := ctx.AssertRegisterConf(preimageRevealed, int32(confs)) confIntent := ctx.AssertRegisterConf(preimageRevealed, int32(confs))
// Assert that the loopout htlc equals to the expected one.
scriptVersion := GetHtlcScriptVersion(protocolVersion)
htlc, err := swap.NewHtlc(
scriptVersion, pendingSwap.Contract.CltvExpiry, senderKey,
receiverKey, hash, swap.HtlcP2WSH, &chaincfg.TestNet3Params,
)
require.NoError(t, err)
require.Equal(t, htlc.PkScript, confIntent.PkScript)
signalSwapPaymentResult(nil) signalSwapPaymentResult(nil)
signalPrepaymentResult(nil) signalPrepaymentResult(nil)
@ -267,13 +302,14 @@ func testResume(t *testing.T, confs uint32, expired, preimageRevealed,
func(r error) {}, func(r error) {},
func(r error) {}, func(r error) {},
preimageRevealed, preimageRevealed,
confIntent, confIntent, scriptVersion,
) )
} }
func testSuccess(ctx *testContext, amt btcutil.Amount, hash lntypes.Hash, func testSuccess(ctx *testContext, amt btcutil.Amount, hash lntypes.Hash,
signalPrepaymentResult, signalSwapPaymentResult func(error), signalPrepaymentResult, signalSwapPaymentResult func(error),
preimageRevealed bool, confIntent *test.ConfRegistration) { preimageRevealed bool, confIntent *test.ConfRegistration,
scriptVersion swap.ScriptVersion) {
htlcOutpoint := ctx.publishHtlc(confIntent.PkScript, amt) htlcOutpoint := ctx.publishHtlc(confIntent.PkScript, amt)
@ -304,8 +340,13 @@ func testSuccess(ctx *testContext, amt btcutil.Amount, hash lntypes.Hash,
ctx.T.Fatalf("client not sweeping from htlc tx") ctx.T.Fatalf("client not sweeping from htlc tx")
} }
preImageIndex := 1
if scriptVersion == swap.HtlcV2 {
preImageIndex = 0
}
// Check preimage. // Check preimage.
clientPreImage := sweepTx.TxIn[0].Witness[1] clientPreImage := sweepTx.TxIn[0].Witness[preImageIndex]
clientPreImageHash := sha256.Sum256(clientPreImage) clientPreImageHash := sha256.Sum256(clientPreImage)
if clientPreImageHash != hash { if clientPreImageHash != hash {
ctx.T.Fatalf("incorrect preimage") ctx.T.Fatalf("incorrect preimage")

@ -282,20 +282,48 @@ func testLoopInTimeout(t *testing.T,
// TestLoopInResume tests resuming swaps in various states. // TestLoopInResume tests resuming swaps in various states.
func TestLoopInResume(t *testing.T) { func TestLoopInResume(t *testing.T) {
t.Run("initiated", func(t *testing.T) { storedVersion := []loopdb.ProtocolVersion{
testLoopInResume(t, loopdb.StateInitiated, false) loopdb.ProtocolVersionUnrecorded,
}) loopdb.ProtocolVersionHtlcV2,
}
t.Run("initiated expired", func(t *testing.T) { htlcVersion := []swap.ScriptVersion{
testLoopInResume(t, loopdb.StateInitiated, true) swap.HtlcV1,
}) swap.HtlcV2,
}
t.Run("htlc published", func(t *testing.T) { for i, version := range storedVersion {
testLoopInResume(t, loopdb.StateHtlcPublished, false) version := version
}) scriptVersion := htlcVersion[i]
t.Run(version.String(), func(t *testing.T) {
t.Run("initiated", func(t *testing.T) {
testLoopInResume(
t, loopdb.StateInitiated, false,
version, scriptVersion,
)
})
t.Run("initiated expired", func(t *testing.T) {
testLoopInResume(
t, loopdb.StateInitiated, true,
version, scriptVersion,
)
})
t.Run("htlc published", func(t *testing.T) {
testLoopInResume(
t, loopdb.StateHtlcPublished, false,
version, scriptVersion,
)
})
})
}
} }
func testLoopInResume(t *testing.T, state loopdb.SwapState, expired bool) { func testLoopInResume(t *testing.T, state loopdb.SwapState, expired bool,
storedVersion loopdb.ProtocolVersion, scriptVersion swap.ScriptVersion) {
defer test.Guard(t)() defer test.Guard(t)()
ctx := newLoopInTestContext(t) ctx := newLoopInTestContext(t)
@ -314,6 +342,7 @@ func testLoopInResume(t *testing.T, state loopdb.SwapState, expired bool) {
SenderKey: senderKey, SenderKey: senderKey,
MaxSwapFee: 60000, MaxSwapFee: 60000,
MaxMinerFee: 50000, MaxMinerFee: 50000,
ProtocolVersion: storedVersion,
}, },
} }
pendSwap := &loopdb.LoopIn{ pendSwap := &loopdb.LoopIn{
@ -331,7 +360,7 @@ func testLoopInResume(t *testing.T, state loopdb.SwapState, expired bool) {
} }
htlc, err := swap.NewHtlc( htlc, err := swap.NewHtlc(
swap.HtlcV1, contract.CltvExpiry, contract.SenderKey, scriptVersion, contract.CltvExpiry, contract.SenderKey,
contract.ReceiverKey, testPreimage.Hash(), swap.HtlcNP2WSH, contract.ReceiverKey, testPreimage.Hash(), swap.HtlcNP2WSH,
cfg.lnd.ChainParams, cfg.lnd.ChainParams,
) )

Loading…
Cancel
Save