mirror of
https://github.com/aljazceru/lspd.git
synced 2026-02-15 19:24:26 +01:00
add integration tests for LND lsp CLN client
This commit is contained in:
1
.github/actions/setup-clightning/action.yaml
vendored
1
.github/actions/setup-clightning/action.yaml
vendored
@@ -74,6 +74,7 @@ runs:
|
||||
- name: Install dependencies
|
||||
if: steps.cache-core-lightning.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y autoconf automake build-essential git libtool libgmp-dev libsqlite3-dev python3 python3-pip net-tools zlib1g-dev libsodium-dev gettext valgrind libpq-dev shellcheck cppcheck libsecp256k1-dev jq
|
||||
sudo apt-get remove -y protobuf-compiler
|
||||
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.12.0/protoc-3.12.0-linux-x86_64.zip
|
||||
|
||||
16
.github/workflows/integration_tests.yaml
vendored
16
.github/workflows/integration_tests.yaml
vendored
@@ -83,7 +83,7 @@ jobs:
|
||||
- setup-lnd-lsp
|
||||
- setup-cln
|
||||
- build-lspd
|
||||
name: test ${{ matrix.implementation }} ${{ matrix.test }}
|
||||
name: test ${{ matrix.lsp }}-lsp ${{ matrix.client }}-client ${{ matrix.test }}
|
||||
strategy:
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
@@ -103,10 +103,18 @@ jobs:
|
||||
testOfflineNotificationRegularForward,
|
||||
testOfflineNotificationZeroConfChannel,
|
||||
]
|
||||
implementation: [
|
||||
lsp: [
|
||||
LND,
|
||||
CLN
|
||||
]
|
||||
client: [
|
||||
LND,
|
||||
CLN
|
||||
]
|
||||
exclude:
|
||||
- lsp: CLN
|
||||
client: LND
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
@@ -114,8 +122,8 @@ jobs:
|
||||
- name: Run and Process Test State
|
||||
uses: ./.github/actions/test-lspd
|
||||
with:
|
||||
TESTRE: "TestLspd/${{ matrix.implementation }}-lspd:_${{ matrix.test }}"
|
||||
artifact-name: TestLspd-${{ matrix.implementation }}-lspd_${{ matrix.test }}
|
||||
TESTRE: "TestLspd/${{ matrix.lsp }}-lsp-${{ matrix.client}}-client:_${{ matrix.test }}"
|
||||
artifact-name: TestLspd-${{ matrix.lsp }}-lsp-${{ matrix.client}}-client_${{ matrix.test }}
|
||||
bitcoin-version: ${{ env.BITCOIN_VERSION }}
|
||||
LSP_REF: ${{ env.LSP_REF }}
|
||||
CLIENT_REF: ${{ env.CLIENT_REF }}
|
||||
|
||||
2
go.mod
2
go.mod
@@ -4,7 +4,7 @@ go 1.19
|
||||
|
||||
require (
|
||||
github.com/aws/aws-sdk-go v1.34.0
|
||||
github.com/breez/lntest v0.0.26
|
||||
github.com/breez/lntest v0.0.28
|
||||
github.com/btcsuite/btcd v0.23.5-0.20230228185050-38331963bddd
|
||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2
|
||||
|
||||
@@ -38,6 +38,9 @@ def on_openchannel(openchannel, plugin, **kwargs):
|
||||
plugin.log(repr(openchannel))
|
||||
mindepth = int(0)
|
||||
|
||||
if openchannel['funding_msat'] == 200000000:
|
||||
return {'result': 'continue'}
|
||||
|
||||
plugin.log(f"This peer is in the zeroconf allowlist, setting mindepth={mindepth}")
|
||||
return {'result': 'continue', 'mindepth': mindepth}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
ecies "github.com/ecies/go/v2"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/jackc/pgx/v4/pgxpool"
|
||||
"google.golang.org/grpc/metadata"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -121,6 +122,10 @@ func newLspd(h *lntest.TestHarness, mem *mempoolApi, name string, nodeConfig *co
|
||||
if nodeConfig.MinConfs != nil {
|
||||
conf.MinConfs = nodeConfig.MinConfs
|
||||
}
|
||||
|
||||
if nodeConfig.LegacyOnionTokens != nil {
|
||||
conf.LegacyOnionTokens = nodeConfig.LegacyOnionTokens
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("%s: node config: %+v", name, conf)
|
||||
@@ -271,9 +276,10 @@ func RegisterPayment(l LspNode, paymentInfo *lspd.PaymentInformation, continueOn
|
||||
encrypted, err := ecies.Encrypt(l.EciesPublicKey(), serialized)
|
||||
lntest.CheckError(l.Harness().T, err)
|
||||
|
||||
ctx := metadata.AppendToOutgoingContext(l.Harness().Ctx, "authorization", "Bearer hello")
|
||||
log.Printf("Registering payment")
|
||||
_, err = l.Rpc().RegisterPayment(
|
||||
l.Harness().Ctx,
|
||||
ctx,
|
||||
&lspd.RegisterPaymentRequest{
|
||||
Blob: encrypted,
|
||||
},
|
||||
|
||||
@@ -14,8 +14,19 @@ var defaultTimeout time.Duration = time.Second * 120
|
||||
|
||||
func TestLspd(t *testing.T) {
|
||||
testCases := allTestCases
|
||||
runTests(t, testCases, "LND-lspd", lndLspFunc, lndClientFunc)
|
||||
runTests(t, testCases, "CLN-lspd", clnLspFunc, clnClientFunc)
|
||||
runTests(t, testCases, "LND-lsp-CLN-client", lndLspFunc, clnClientFunc)
|
||||
runTests(t, testCases, "LND-lsp-LND-client", legacyOnionLndLspFunc, lndClientFunc)
|
||||
runTests(t, testCases, "CLN-lsp-CLN-client", clnLspFunc, clnClientFunc)
|
||||
}
|
||||
|
||||
func legacyOnionLndLspFunc(h *lntest.TestHarness, m *lntest.Miner, mem *mempoolApi, c *config.NodeConfig) LspNode {
|
||||
cfg := c
|
||||
if cfg == nil {
|
||||
cfg = &config.NodeConfig{}
|
||||
}
|
||||
|
||||
cfg.LegacyOnionTokens = []string{"hello"}
|
||||
return lndLspFunc(h, m, mem, cfg)
|
||||
}
|
||||
|
||||
func lndLspFunc(h *lntest.TestHarness, m *lntest.Miner, mem *mempoolApi, c *config.NodeConfig) LspNode {
|
||||
|
||||
@@ -168,6 +168,23 @@ func testOfflineNotificationRegularForward(p *testParams) {
|
||||
})
|
||||
log.Printf(bobInvoice.Bolt11)
|
||||
|
||||
invoiceWithHint := bobInvoice.Bolt11
|
||||
if !ContainsHopHint(p.t, bobInvoice.Bolt11) {
|
||||
chans := p.BreezClient().Node().GetChannels()
|
||||
assert.Len(p.t, chans, 1)
|
||||
|
||||
var id lntest.ShortChannelID
|
||||
if chans[0].RemoteAlias != nil {
|
||||
id = *chans[0].RemoteAlias
|
||||
} else if chans[0].LocalAlias != nil {
|
||||
id = *chans[0].LocalAlias
|
||||
} else {
|
||||
id = chans[0].ShortChannelID
|
||||
}
|
||||
invoiceWithHint = AddHopHint(p.BreezClient(), bobInvoice.Bolt11, p.Lsp(), id, nil)
|
||||
}
|
||||
log.Printf("invoice with hint: %v", invoiceWithHint)
|
||||
|
||||
log.Printf("Bob going offline")
|
||||
p.BreezClient().Stop()
|
||||
|
||||
@@ -176,7 +193,7 @@ func testOfflineNotificationRegularForward(p *testParams) {
|
||||
<-time.After(htlcInterceptorDelay)
|
||||
|
||||
log.Printf("Alice paying")
|
||||
payResp := alice.Pay(bobInvoice.Bolt11)
|
||||
payResp := alice.Pay(invoiceWithHint)
|
||||
invoiceResult := p.BreezClient().Node().GetInvoice(bobInvoice.PaymentHash)
|
||||
|
||||
assert.Equal(p.t, payResp.PaymentPreimage, invoiceResult.PaymentPreimage)
|
||||
|
||||
@@ -45,8 +45,25 @@ func testRegularForward(p *testParams) {
|
||||
})
|
||||
log.Printf(bobInvoice.Bolt11)
|
||||
|
||||
invoiceWithHint := bobInvoice.Bolt11
|
||||
if !ContainsHopHint(p.t, bobInvoice.Bolt11) {
|
||||
chans := p.BreezClient().Node().GetChannels()
|
||||
assert.Len(p.t, chans, 1)
|
||||
|
||||
var id lntest.ShortChannelID
|
||||
if chans[0].RemoteAlias != nil {
|
||||
id = *chans[0].RemoteAlias
|
||||
} else if chans[0].LocalAlias != nil {
|
||||
id = *chans[0].LocalAlias
|
||||
} else {
|
||||
id = chans[0].ShortChannelID
|
||||
}
|
||||
invoiceWithHint = AddHopHint(p.BreezClient(), bobInvoice.Bolt11, p.Lsp(), id, nil)
|
||||
}
|
||||
log.Printf("invoice with hint: %v", invoiceWithHint)
|
||||
|
||||
log.Printf("Alice paying")
|
||||
payResp := alice.Pay(bobInvoice.Bolt11)
|
||||
payResp := alice.Pay(invoiceWithHint)
|
||||
invoiceResult := p.BreezClient().Node().GetInvoice(bobInvoice.PaymentHash)
|
||||
|
||||
assert.Equal(p.t, payResp.PaymentPreimage, invoiceResult.PaymentPreimage)
|
||||
|
||||
@@ -61,4 +61,10 @@ func testZeroReserve(p *testParams) {
|
||||
assert.Equal(p.t, c.RemoteReserveMsat, c.CapacityMsat/100)
|
||||
log.Printf("local reserve: %d, remote reserve: %d", c.LocalReserveMsat, c.RemoteReserveMsat)
|
||||
assert.Zero(p.t, c.LocalReserveMsat)
|
||||
|
||||
lspInvoice := p.lsp.LightningNode().CreateBolt11Invoice(&lntest.CreateInvoiceOptions{
|
||||
AmountMsat: innerAmountMsat - 1,
|
||||
})
|
||||
<-time.After(time.Second * 1)
|
||||
p.BreezClient().Node().Pay(lspInvoice.Bolt11)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user