lnd.xprv/lnwire/channel_announcement_test.go

90 lines
2.5 KiB
Go

package lnwire
import (
"bytes"
"reflect"
"testing"
"github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
)
func TestChannelAnnoucementEncodeDecode(t *testing.T) {
ca := &ChannelAnnouncement{
NodeSig1: someSig,
NodeSig2: someSig,
ShortChannelID: someShortChannelID,
BitcoinSig1: someSig,
BitcoinSig2: someSig,
NodeID1: pubKey,
NodeID2: pubKey,
BitcoinKey1: pubKey,
BitcoinKey2: pubKey,
}
// Next encode the CA message into an empty bytes buffer.
var b bytes.Buffer
if err := ca.Encode(&b, 0); err != nil {
t.Fatalf("unable to encode ChannelAnnouncement: %v", err)
}
// Ensure the max payload estimate is correct.
serializedLength := uint32(b.Len())
if serializedLength != ca.MaxPayloadLength(0) {
t.Fatalf("payload length estimate is incorrect: expected %v "+
"got %v", serializedLength, ca.MaxPayloadLength(0))
}
// Deserialize the encoded CA message into a new empty struct.
ca2 := &ChannelAnnouncement{}
if err := ca2.Decode(&b, 0); err != nil {
t.Fatalf("unable to decode ChannelAnnouncement: %v", err)
}
// Assert equality of the two instances.
if !reflect.DeepEqual(ca, ca2) {
t.Fatalf("encode/decode error messages don't match %#v vs %#v",
ca, ca2)
}
}
func TestChannelAnnoucementValidation(t *testing.T) {
getKeys := func(s string) (*btcec.PrivateKey, *btcec.PublicKey) {
return btcec.PrivKeyFromBytes(btcec.S256(), []byte(s))
}
firstNodePrivKey, firstNodePubKey := getKeys("node-id-1")
secondNodePrivKey, secondNodePubKey := getKeys("node-id-2")
firstBitcoinPrivKey, firstBitcoinPubKey := getKeys("bitcoin-key-1")
secondBitcoinPrivKey, secondBitcoinPubKey := getKeys("bitcoin-key-2")
hash := chainhash.DoubleHashB(firstNodePubKey.SerializeCompressed())
firstBitcoinSig, _ := firstBitcoinPrivKey.Sign(hash)
hash = chainhash.DoubleHashB(secondNodePubKey.SerializeCompressed())
secondBitcoinSig, _ := secondBitcoinPrivKey.Sign(hash)
ca := &ChannelAnnouncement{
ShortChannelID: someShortChannelID,
BitcoinSig1: firstBitcoinSig,
BitcoinSig2: secondBitcoinSig,
NodeID1: firstNodePubKey,
NodeID2: secondNodePubKey,
BitcoinKey1: firstBitcoinPubKey,
BitcoinKey2: secondBitcoinPubKey,
}
dataToSign, _ := ca.DataToSign()
hash = chainhash.DoubleHashB(dataToSign)
firstNodeSign, _ := firstNodePrivKey.Sign(hash)
ca.NodeSig1 = firstNodeSign
secondNodeSign, _ := secondNodePrivKey.Sign(hash)
ca.NodeSig2 = secondNodeSign
if err := ca.Validate(); err != nil {
t.Fatal(err)
}
}