diff --git a/protocols/isis/packet/tlv_area_addresses.go b/protocols/isis/packet/tlv_area_addresses.go index 3c07dcaa800fad87e4e3e992b85fb962cbb38cf0..06494998163f36c35428de264e9263a915cf715b 100644 --- a/protocols/isis/packet/tlv_area_addresses.go +++ b/protocols/isis/packet/tlv_area_addresses.go @@ -7,10 +7,10 @@ import ( "github.com/bio-routing/bio-rd/protocols/isis/types" ) -// AreaAddressTLVType is the type value of an area address TLV +// AreaAddressesTLVType is the type value of an area address TLV const AreaAddressesTLVType = 1 -// AreaAddressTLV represents an area address TLV +// AreaAddressesTLV represents an area address TLV type AreaAddressesTLV struct { TLVType uint8 TLVLength uint8 @@ -47,11 +47,12 @@ func readAreaAddressesTLV(buf *bytes.Buffer, tlvType uint8, tlvLength uint8) (*A return pdu, nil } -func NewAreaAddressTLV(areas []types.AreaID) *AreaAddressesTLV { +// NewAreaAddressesTLV creates a new area addresses TLV +func NewAreaAddressesTLV(areas []types.AreaID) *AreaAddressesTLV { a := &AreaAddressesTLV{ - TLVType: AreaAddressesTLVType, + TLVType: AreaAddressesTLVType, TLVLength: 0, - AreaIDs: make([]types.AreaID, len(areas)), + AreaIDs: make([]types.AreaID, len(areas)), } for i, area := range areas { diff --git a/protocols/isis/packet/tlv_area_addresses_test.go b/protocols/isis/packet/tlv_area_addresses_test.go new file mode 100644 index 0000000000000000000000000000000000000000..f9965df3c1fe23c961a8192405a620a50e773f5b --- /dev/null +++ b/protocols/isis/packet/tlv_area_addresses_test.go @@ -0,0 +1,99 @@ +package packet + +import ( + "bytes" + "testing" + + "github.com/bio-routing/bio-rd/protocols/isis/types" + "github.com/stretchr/testify/assert" +) + +func TestNewAreaAddressesTLV(t *testing.T) { + tests := []struct { + name string + input []types.AreaID + expected *AreaAddressesTLV + }{ + { + name: "Without Areas", + input: []types.AreaID{}, + expected: &AreaAddressesTLV{ + TLVType: 1, + TLVLength: 0, + AreaIDs: []types.AreaID{}, + }, + }, + { + name: "With Areas", + input: []types.AreaID{ + { + 1, 2, 3, + }, + }, + expected: &AreaAddressesTLV{ + TLVType: 1, + TLVLength: 4, + AreaIDs: []types.AreaID{ + { + 1, 2, 3, + }, + }, + }, + }, + } + + for _, test := range tests { + tlv := NewAreaAddressesTLV(test.input) + assert.Equalf(t, test.expected, tlv, "Test %q", test.name) + } +} + +func TestAreaAddressesTLV(t *testing.T) { + tlv := NewAreaAddressesTLV([]types.AreaID{}) + + assert.Equal(t, uint8(1), tlv.Type()) + assert.Equal(t, uint8(0), tlv.Length()) + assert.Equal(t, AreaAddressesTLV{ + TLVType: 1, + TLVLength: 0, + AreaIDs: []types.AreaID{}, + }, tlv.Value()) +} + +func TestAreaAddressesTLVSerialize(t *testing.T) { + tests := []struct { + name string + input *AreaAddressesTLV + expected []byte + }{ + { + name: "Full", + input: &AreaAddressesTLV{ + TLVType: 1, + TLVLength: 0, + AreaIDs: []types.AreaID{}, + }, + expected: []byte{1, 0}, + }, + { + name: "Full", + input: &AreaAddressesTLV{ + TLVType: 8, + TLVLength: 4, + AreaIDs: []types.AreaID{ + { + 1, 2, 3, + }, + }, + }, + expected: []byte{8, 4, 3, 1, 2, 3}, + }, + } + + for _, test := range tests { + buf := bytes.NewBuffer(nil) + test.input.Serialize(buf) + + assert.Equalf(t, test.expected, buf.Bytes(), "Test %q", test.name) + } +}