a93b6dcee4
This is the most different due to segwit (the rest of the messages are simple). I still need to simplify/refactor the tests, they're "messy".
113 lines
4.0 KiB
Go
113 lines
4.0 KiB
Go
package lnwire
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/hex"
|
|
"github.com/btcsuite/btcd/btcec"
|
|
"github.com/btcsuite/btcd/txscript"
|
|
"github.com/btcsuite/btcd/wire"
|
|
// "io"
|
|
"io/ioutil"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestFundingSignCompleteEncodeDecode(t *testing.T) {
|
|
var (
|
|
//For debugging, writes to /dev/shm/
|
|
//Maybe in the future do it if you do "go test -v"
|
|
WRITE_FILE = false
|
|
FILENAME = "/dev/shm/fundingSignComplete.raw"
|
|
|
|
//TxID
|
|
txid = new(wire.ShaHash)
|
|
//Reversed when displayed
|
|
txidBytes, _ = hex.DecodeString("fd95c6e5c9d5bcf9cfc7231b6a438e46c518c724d0b04b75cc8fddf84a254e3a")
|
|
_ = copy(txid[:], txidBytes)
|
|
|
|
//Funding TX Sig 1
|
|
tx = wire.NewMsgTx()
|
|
emptybytes = new([]byte)
|
|
sig1privKeyBytes, _ = hex.DecodeString("927f5827d75dd2addeb532c0fa5ac9277565f981dd6d0d037b422be5f60bdbef")
|
|
sig1privKey, _ = btcec.PrivKeyFromBytes(btcec.S256(), sig1privKeyBytes)
|
|
sigStr1, _ = txscript.RawTxInSignature(tx, 0, *emptybytes, txscript.SigHashAll, sig1privKey)
|
|
commitSig1, _ = btcec.ParseSignature(sigStr1, btcec.S256())
|
|
//Funding TX Sig 2
|
|
sig2privKeyBytes, _ = hex.DecodeString("8a4ad188f6f4000495b765cfb6ffa591133a73019c45428ddd28f53bab551847")
|
|
sig2privKey, _ = btcec.PrivKeyFromBytes(btcec.S256(), sig2privKeyBytes)
|
|
sigStr2, _ = txscript.RawTxInSignature(tx, 0, *emptybytes, txscript.SigHashAll, sig2privKey)
|
|
commitSig2, _ = btcec.ParseSignature(sigStr2, btcec.S256())
|
|
fundingTXSigs = append(*new([]btcec.Signature), *commitSig1, *commitSig2)
|
|
|
|
//funding response
|
|
fundingSignComplete = &FundingSignComplete{
|
|
ReservationID: uint64(12345678),
|
|
TxID: txid,
|
|
FundingTXSigs: &fundingTXSigs,
|
|
}
|
|
serializedString = "0000000000bc614efd95c6e5c9d5bcf9cfc7231b6a438e46c518c724d0b04b75cc8fddf84a254e3a02473045022100e7946d057c0b4cc4d3ea525ba156b429796858ebc543d75a6c6c2cbca732db6902202fea377c1f9fb98cd103cf5a4fba276a074b378d4227d15f5fa6439f1a6685bb4630440220235ee55fed634080089953048c3e3f7dc3a154fd7ad18f31dc08e05b7864608a02203bdd7d4e4d9a8162d4b511faf161f0bb16c45181187125017cd0c620c53876ca"
|
|
serializedMessage = "0709110b000000e6000000b80000000000bc614efd95c6e5c9d5bcf9cfc7231b6a438e46c518c724d0b04b75cc8fddf84a254e3a02473045022100e7946d057c0b4cc4d3ea525ba156b429796858ebc543d75a6c6c2cbca732db6902202fea377c1f9fb98cd103cf5a4fba276a074b378d4227d15f5fa6439f1a6685bb4630440220235ee55fed634080089953048c3e3f7dc3a154fd7ad18f31dc08e05b7864608a02203bdd7d4e4d9a8162d4b511faf161f0bb16c45181187125017cd0c620c53876ca"
|
|
)
|
|
//Test serialization
|
|
b := new(bytes.Buffer)
|
|
err := fundingSignComplete.Encode(b, 0)
|
|
if err != nil {
|
|
t.Error("Serialization error")
|
|
t.Error(err.Error())
|
|
} else {
|
|
t.Logf("Encoded FundingSignComplete: %x\n", b.Bytes())
|
|
//Check if we serialized correctly
|
|
if serializedString != hex.EncodeToString(b.Bytes()) {
|
|
t.Error("Serialization does not match expected")
|
|
}
|
|
|
|
//So I can do: hexdump -C /dev/shm/fundingSignComplete.raw
|
|
if WRITE_FILE {
|
|
err = ioutil.WriteFile(FILENAME, b.Bytes(), 0644)
|
|
if err != nil {
|
|
t.Error("File write error")
|
|
t.Error(err.Error())
|
|
}
|
|
}
|
|
}
|
|
|
|
//Test deserialization
|
|
//Make a new buffer just to be clean
|
|
c := new(bytes.Buffer)
|
|
c.Write(b.Bytes())
|
|
|
|
newFunding := NewFundingSignComplete()
|
|
err = newFunding.Decode(c, 0)
|
|
if err != nil {
|
|
t.Error("Decoding Error")
|
|
t.Error(err.Error())
|
|
} else {
|
|
if !reflect.DeepEqual(newFunding, fundingSignComplete) {
|
|
t.Error("Decoding does not match!")
|
|
}
|
|
//Show the struct
|
|
t.Log(newFunding.String())
|
|
}
|
|
|
|
//Test message using Message interface
|
|
//Serialize/Encode
|
|
b = new(bytes.Buffer)
|
|
_, err = WriteMessage(b, fundingSignComplete, uint32(1), wire.TestNet3)
|
|
t.Logf("%x\n", b.Bytes())
|
|
if hex.EncodeToString(b.Bytes()) != serializedMessage {
|
|
t.Error("Message encoding error")
|
|
}
|
|
//Deserialize/Decode
|
|
c = new(bytes.Buffer)
|
|
c.Write(b.Bytes())
|
|
_, msg, _, err := ReadMessage(c, uint32(1), wire.TestNet3)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
} else {
|
|
if !reflect.DeepEqual(msg, fundingSignComplete) {
|
|
t.Error("Message decoding does not match!")
|
|
}
|
|
t.Logf(msg.String())
|
|
}
|
|
}
|