mirror of
https://github.com/lightninglabs/aperture.git
synced 2025-12-17 09:04:19 +01:00
To get rid of the loop dependency, we copy the test code that we rely on and fix some imports.
99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
package test
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"runtime/pprof"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/btcsuite/btcd/btcec"
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
"github.com/btcsuite/btcutil"
|
|
"github.com/lightningnetwork/lnd/lntypes"
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
"github.com/lightningnetwork/lnd/zpay32"
|
|
)
|
|
|
|
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")
|
|
|
|
testTime = time.Date(2018, time.January, 9, 14, 00, 00, 0, time.UTC)
|
|
)
|
|
|
|
// GetDestAddr deterministically generates a sweep address for testing.
|
|
func GetDestAddr(t *testing.T, nr byte) btcutil.Address {
|
|
destAddr, err := btcutil.NewAddressScriptHash([]byte{nr},
|
|
&chaincfg.MainNetParams)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
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) {
|
|
// btcec.SignCompact returns a
|
|
// pubkey-recoverable signature
|
|
sig, err := btcec.SignCompact(
|
|
btcec.S256(),
|
|
privKey,
|
|
payReq.PaymentHash[:],
|
|
true,
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf(
|
|
"can't sign the hash: %v", err)
|
|
}
|
|
|
|
return sig, nil
|
|
},
|
|
},
|
|
)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return reqString, nil
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// DumpGoroutines dumps all currently running goroutines.
|
|
func DumpGoroutines() {
|
|
err := pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|