pool/sidecar/tlv_test.go
positiveblue 40b2cfdd07
sidecar: new version for unannounced/zero conf channels
A sidecar ticket will always use the minimum version needed to encode
all the relavant information for that offer. In that way the tickets
from a provider with a newer version can be redeemed by recipeients
using older versions as long as the ticket does not encode new
functionalities.
2022-10-18 04:34:22 -07:00

101 lines
2.5 KiB
Go

package sidecar
import (
"bytes"
"encoding/hex"
"testing"
"github.com/btcsuite/btcd/btcec/v2"
"github.com/lightninglabs/pool/internal/test"
"github.com/stretchr/testify/require"
)
var (
testPubKeyRaw, _ = hex.DecodeString(
"02d52e6e60001ed587b784bf3f18dc2905d83b2f36e496263f283b1a7589" +
"2879c7",
)
testPubKeyRaw2, _ = hex.DecodeString(
"0319d616f6a373b24fe5d45fb2964bea4054196820f41ef1a093a9c8e234" +
"e57cf7",
)
testPubKey, _ = btcec.ParsePubKey(testPubKeyRaw)
testPubKey2, _ = btcec.ParsePubKey(testPubKeyRaw2)
)
func TestSerializeTicket(t *testing.T) {
var buf bytes.Buffer
// Test serialization of nil struct members.
ticketMinimal := &Ticket{
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
Version: Version(99),
State: StateRegistered,
}
err := SerializeTicket(&buf, ticketMinimal)
require.NoError(t, err)
deserializedTicket, err := DeserializeTicket(
bytes.NewReader(buf.Bytes()),
)
require.NoError(t, err)
require.Equal(t, ticketMinimal, deserializedTicket)
buf.Reset()
// Test serialization of nil sub struct members.
ticketEmptySubStructs := &Ticket{
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
Version: Version(99),
State: StateRegistered,
Offer: Offer{},
Recipient: &Recipient{},
Order: &Order{},
Execution: &Execution{},
}
err = SerializeTicket(&buf, ticketEmptySubStructs)
require.NoError(t, err)
deserializedTicket, err = DeserializeTicket(
bytes.NewReader(buf.Bytes()),
)
require.NoError(t, err)
require.Equal(t, ticketEmptySubStructs, deserializedTicket)
buf.Reset()
// Test with all struct members set.
ticketMaximal := &Ticket{
ID: [8]byte{7, 6, 5, 4, 3, 2, 1, 0},
Version: Version(99),
State: StateRegistered,
Offer: Offer{
Capacity: 777,
PushAmt: 888,
SignPubKey: testPubKey,
SigOfferDigest: test.NewSignatureFromInt(22, 55),
Auto: true,
UnannouncedChannel: true,
ZeroConfChannel: true,
},
Recipient: &Recipient{
NodePubKey: testPubKey,
MultiSigPubKey: testPubKey2,
},
Order: &Order{
BidNonce: [32]byte{11, 22, 33, 44},
SigOrderDigest: test.NewSignatureFromInt(99, 33),
},
Execution: &Execution{
PendingChannelID: [32]byte{99, 88, 77},
},
}
err = SerializeTicket(&buf, ticketMaximal)
require.NoError(t, err)
deserializedTicket, err = DeserializeTicket(
bytes.NewReader(buf.Bytes()),
)
require.NoError(t, err)
require.Equal(t, ticketMaximal, deserializedTicket)
}