diff --git a/lnwire/dyn_propose_test.go b/lnwire/dyn_propose_test.go new file mode 100644 index 000000000..2b2549776 --- /dev/null +++ b/lnwire/dyn_propose_test.go @@ -0,0 +1,86 @@ +package lnwire + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" +) + +// TestDynProposeEncodeDecode checks that the Encode and Decode methods work as +// expected. +func TestDynProposeEncodeDecode(t *testing.T) { + t.Parallel() + + // Generate random channel ID. + chanIDBytes, err := generateRandomBytes(32) + require.NoError(t, err) + + var chanID ChannelID + copy(chanID[:], chanIDBytes) + + // Create test data for the TLVs. The actual value doesn't matter, as we + // only care about that the raw bytes can be decoded into a msg, and the + // msg can be encoded into the exact same raw bytes. + testTlvData := []byte{ + // DustLimit tlv. + 0x0, // type. + 0x5, // length. + 0xfe, 0x0, 0xf, 0x42, 0x40, // value (BigSize: 1_000_000). + + // ExtraData - unknown tlv record. + // + // NOTE: This record is optional and occupies the type 1. + 0x1, // type. + 0x2, // length. + 0x79, 0x79, // value. + + // MaxValueInFlight tlv. + 0x2, // type. + 0x5, // length. + 0xfe, 0x0, 0xf, 0x42, 0x40, // value (BigSize: 1_000_000). + + // HtlcMinimum tlv. + 0x4, // type. + 0x5, // length. + 0xfe, 0x0, 0xf, 0x42, 0x40, // value (BigSize: 1_000_000). + // + // ChannelReserve tlv. + 0x6, // type. + 0x5, // length. + 0xfe, 0x0, 0xf, 0x42, 0x40, // value (BigSize: 1_000_000). + + // CsvDelay tlv. + 0x8, // type. + 0x2, // length. + 0x0, 0x8, // value. + + // MaxAcceptedHTLCs tlv. + 0xa, // type. + 0x2, // length. + 0x0, 0x8, // value. + + // ChannelType tlv is empty. + // + // ExtraData - unknown tlv record. + 0x6f, // type. + 0x2, // length. + 0x79, 0x79, // value. + } + + msg := &DynPropose{} + + rawBytes := make([]byte, 0, len(chanIDBytes)+len(testTlvData)) + rawBytes = append(rawBytes, chanIDBytes...) + rawBytes = append(rawBytes, testTlvData...) + + r := bytes.NewBuffer(rawBytes) + err = msg.Decode(r, 0) + require.NoError(t, err) + + w := new(bytes.Buffer) + err = msg.Encode(w, 0) + require.NoError(t, err) + + require.Equal(t, rawBytes, w.Bytes()) +}