2019-03-06 20:13:50 +00:00
|
|
|
package test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"runtime/pprof"
|
|
|
|
"testing"
|
|
|
|
"time"
|
2019-03-12 15:10:37 +00:00
|
|
|
|
2022-03-14 12:36:02 +00:00
|
|
|
"github.com/btcsuite/btcd/btcec/v2/ecdsa"
|
|
|
|
"github.com/btcsuite/btcd/btcutil"
|
2019-03-12 15:10:37 +00:00
|
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
|
|
"github.com/lightningnetwork/lnd/lntypes"
|
|
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
|
|
"github.com/lightningnetwork/lnd/zpay32"
|
2022-11-29 20:36:14 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2019-03-06 20:13:50 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// Timeout is the default timeout when tests wait for something to
|
|
|
|
// happen.
|
|
|
|
Timeout = time.Second * 5
|
|
|
|
|
|
|
|
// ErrTimeout is returned on timeout.
|
|
|
|
ErrTimeout = errors.New("test timeout")
|
2019-03-12 15:10:37 +00:00
|
|
|
|
|
|
|
testTime = time.Date(2018, time.January, 9, 14, 00, 00, 0, time.UTC)
|
2019-03-06 20:13:50 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// GetDestAddr deterministically generates a sweep address for testing.
|
|
|
|
func GetDestAddr(t *testing.T, nr byte) btcutil.Address {
|
2022-11-29 20:36:14 +00:00
|
|
|
destAddr, err := btcutil.NewAddressScriptHash(
|
|
|
|
[]byte{nr}, &chaincfg.MainNetParams,
|
|
|
|
)
|
|
|
|
require.NoError(t, err)
|
2019-03-06 20:13:50 +00:00
|
|
|
|
|
|
|
return destAddr
|
|
|
|
}
|
|
|
|
|
|
|
|
// EncodePayReq encodes a zpay32 invoice with a fixed key.
|
|
|
|
func EncodePayReq(payReq *zpay32.Invoice) (string, error) {
|
|
|
|
privKey, _ := CreateKey(5)
|
|
|
|
reqString, err := payReq.Encode(
|
|
|
|
zpay32.MessageSigner{
|
|
|
|
SignCompact: func(hash []byte) ([]byte, error) {
|
2022-03-14 12:36:02 +00:00
|
|
|
// ecdsa.SignCompact returns a
|
|
|
|
// pubkey-recoverable signature.
|
|
|
|
sig, err := ecdsa.SignCompact(
|
|
|
|
privKey, payReq.PaymentHash[:], true,
|
2019-03-06 20:13:50 +00:00
|
|
|
)
|
|
|
|
if err != nil {
|
2022-03-14 12:36:02 +00:00
|
|
|
return nil, fmt.Errorf("can't sign "+
|
|
|
|
"the hash: %v", err)
|
2019-03-06 20:13:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return sig, nil
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return reqString, nil
|
|
|
|
}
|
|
|
|
|
2019-03-12 15:10:37 +00:00
|
|
|
// GetInvoice creates a testnet payment request with the given parameters.
|
|
|
|
func GetInvoice(hash lntypes.Hash, amt btcutil.Amount, memo string) (
|
|
|
|
string, error) {
|
|
|
|
|
|
|
|
req, err := zpay32.NewInvoice(
|
|
|
|
&chaincfg.TestNet3Params, hash, testTime,
|
|
|
|
zpay32.Description(memo),
|
|
|
|
zpay32.Amount(lnwire.NewMSatFromSatoshis(amt)),
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
reqString, err := EncodePayReq(req)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return reqString, nil
|
|
|
|
}
|
|
|
|
|
2019-03-06 20:13:50 +00:00
|
|
|
// DumpGoroutines dumps all currently running goroutines.
|
|
|
|
func DumpGoroutines() {
|
2019-10-07 15:29:24 +00:00
|
|
|
err := pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2019-03-06 20:13:50 +00:00
|
|
|
}
|