Files
lndhub.go/integration_tests/lnd_cluster_test.go
2023-06-26 16:58:25 +02:00

58 lines
1.9 KiB
Go

package integration_tests
import (
"context"
"fmt"
"testing"
"time"
"github.com/getAlby/lndhub.go/lib"
"github.com/getAlby/lndhub.go/lnd"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/stretchr/testify/assert"
)
func TestLNDCluster(t *testing.T) {
mockClients := []lnd.LightningClientWrapper{}
mockLND1, err := NewMockLND("1234567890abcdef", 0, make(chan (*lnrpc.Invoice)))
assert.NoError(t, err)
mockLND2, err := NewMockLND("1234567890abcdefff", 0, make(chan (*lnrpc.Invoice)))
assert.NoError(t, err)
mockClients = append(mockClients, mockLND1, mockLND2)
lndMockCluster := lnd.LNDCluster{
Nodes: mockClients,
ActiveNode: mockClients[0],
ActiveChannelRatio: 0.5,
Logger: lib.Logger(""),
LivenessCheckPeriod: 1,
}
ctx, cancel := context.WithCancel(context.Background())
go lndMockCluster.StartLivenessLoop(ctx)
//record pubkey of lnd-1, lnd-2
info1, err := mockLND1.GetInfo(ctx, &lnrpc.GetInfoRequest{})
assert.NoError(t, err)
info2, err := mockLND2.GetInfo(ctx, &lnrpc.GetInfoRequest{})
assert.NoError(t, err)
//call getinfo - should be lnd1 that responds
resp, err := lndMockCluster.GetInfo(ctx, &lnrpc.GetInfoRequest{})
assert.NoError(t, err)
assert.Equal(t, info1.IdentityPubkey, resp.IdentityPubkey)
//make lnd-1 return the error
mockLND1.GetInfoError = fmt.Errorf("some error")
//sleep a bit again
time.Sleep(2 * time.Second)
//call getinfo, should be lnd2 that responds
resp, err = lndMockCluster.GetInfo(ctx, &lnrpc.GetInfoRequest{})
assert.NoError(t, err)
assert.Equal(t, info2.IdentityPubkey, resp.IdentityPubkey)
//make lnd-1 return no error
mockLND1.GetInfoError = nil
//sleep a bit again
time.Sleep(2 * time.Second)
//call getinfo, should be lnd1 that responds
resp, err = lndMockCluster.GetInfo(ctx, &lnrpc.GetInfoRequest{})
assert.NoError(t, err)
assert.Equal(t, info1.IdentityPubkey, resp.IdentityPubkey)
cancel()
}