From bb72264917495968bcd3e8bcb0110f0ac8bf7d33 Mon Sep 17 00:00:00 2001
From: Oliver Herms <oliver.herms@exaring.de>
Date: Sat, 6 Oct 2018 22:25:01 +0200
Subject: [PATCH] More tests

---
 protocols/isis/packet/tlv_area_addresses.go   | 11 ++-
 .../isis/packet/tlv_area_addresses_test.go    | 99 +++++++++++++++++++
 2 files changed, 105 insertions(+), 5 deletions(-)
 create mode 100644 protocols/isis/packet/tlv_area_addresses_test.go

diff --git a/protocols/isis/packet/tlv_area_addresses.go b/protocols/isis/packet/tlv_area_addresses.go
index 3c07dcaa..06494998 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 00000000..f9965df3
--- /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)
+	}
+}
-- 
GitLab