summaryrefslogtreecommitdiffhomepage
path: root/pkg/packet/rtr/rtr_test.go
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2018-07-07 13:48:38 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2018-07-07 20:44:25 +0900
commitc4775c42510d1f1ddd55036dc19e982712fa6a0b (patch)
tree6ec8b61d4338c809e239e3003a2d32d480898e22 /pkg/packet/rtr/rtr_test.go
parentb3079759aa13172fcb548a83da9a9653d8d5fed4 (diff)
follow Standard Go Project Layout
https://github.com/golang-standards/project-layout Now you can see clearly what are private and public library code. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'pkg/packet/rtr/rtr_test.go')
-rw-r--r--pkg/packet/rtr/rtr_test.go118
1 files changed, 118 insertions, 0 deletions
diff --git a/pkg/packet/rtr/rtr_test.go b/pkg/packet/rtr/rtr_test.go
new file mode 100644
index 00000000..08f930b2
--- /dev/null
+++ b/pkg/packet/rtr/rtr_test.go
@@ -0,0 +1,118 @@
+// Copyright (C) 2015 Nippon Telegraph and Telephone Corporation.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+// implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package rtr
+
+import (
+ "encoding/hex"
+ "math/rand"
+ "net"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func verifyRTRMessage(t *testing.T, m1 RTRMessage) {
+ buf1, _ := m1.Serialize()
+ m2, err := ParseRTR(buf1)
+ require.NoError(t, err)
+
+ buf2, err := m2.Serialize()
+ require.NoError(t, err)
+
+ assert.Equal(t, buf1, buf2, "buf1: %v buf2: %v", hex.EncodeToString(buf1), hex.EncodeToString(buf2))
+}
+
+func randUint32() uint32 {
+ rand.Seed(time.Now().UnixNano())
+ return rand.Uint32()
+}
+
+func Test_RTRSerialNotify(t *testing.T) {
+ id := uint16(time.Now().Unix())
+ sn := randUint32()
+ verifyRTRMessage(t, NewRTRSerialNotify(id, sn))
+}
+
+func Test_RTRSerialQuery(t *testing.T) {
+ id := uint16(time.Now().Unix())
+ sn := randUint32()
+ verifyRTRMessage(t, NewRTRSerialQuery(id, sn))
+}
+
+func Test_RTRResetQuery(t *testing.T) {
+ verifyRTRMessage(t, NewRTRResetQuery())
+}
+
+func Test_RTRCacheResponse(t *testing.T) {
+ id := uint16(time.Now().Unix())
+ verifyRTRMessage(t, NewRTRCacheResponse(id))
+}
+
+type rtrIPPrefixTestCase struct {
+ pString string
+ pLen uint8
+ mLen uint8
+ asn uint32
+ flags uint8
+}
+
+var rtrIPPrefixTestCases = []rtrIPPrefixTestCase{
+ {"192.168.0.0", 16, 32, 65001, ANNOUNCEMENT},
+ {"192.168.0.0", 16, 32, 65001, WITHDRAWAL},
+ {"2001:db8::", 32, 128, 65001, ANNOUNCEMENT},
+ {"2001:db8::", 32, 128, 65001, WITHDRAWAL},
+ {"::ffff:0.0.0.0", 96, 128, 65001, ANNOUNCEMENT},
+ {"::ffff:0.0.0.0", 96, 128, 65001, WITHDRAWAL},
+}
+
+func Test_RTRIPPrefix(t *testing.T) {
+ for i := range rtrIPPrefixTestCases {
+ test := &rtrIPPrefixTestCases[i]
+ addr := net.ParseIP(test.pString)
+ verifyRTRMessage(t, NewRTRIPPrefix(addr, test.pLen, test.mLen, test.asn, test.flags))
+ }
+}
+
+func Test_RTREndOfData(t *testing.T) {
+ id := uint16(time.Now().Unix())
+ sn := randUint32()
+ verifyRTRMessage(t, NewRTREndOfData(id, sn))
+}
+
+func Test_RTRCacheReset(t *testing.T) {
+ verifyRTRMessage(t, NewRTRCacheReset())
+}
+
+func Test_RTRErrorReport(t *testing.T) {
+ errPDU, _ := NewRTRResetQuery().Serialize()
+ errText1 := []byte("Couldn't send CacheResponce PDU")
+ errText2 := []byte("Wrong Length of PDU: 10 bytes")
+
+ // See 5.10 ErrorReport in RFC6810
+ // when it doesn't have both "erroneous PDU" and "Arbitrary Text"
+ verifyRTRMessage(t, NewRTRErrorReport(NO_DATA_AVAILABLE, nil, nil))
+
+ // when it has "erroneous PDU"
+ verifyRTRMessage(t, NewRTRErrorReport(UNSUPPORTED_PROTOCOL_VERSION, errPDU, nil))
+
+ // when it has "ArbitaryText"
+ verifyRTRMessage(t, NewRTRErrorReport(INTERNAL_ERROR, nil, errText1))
+
+ // when it has both "erroneous PDU" and "Arbitrary Text"
+ verifyRTRMessage(t, NewRTRErrorReport(CORRUPT_DATA, errPDU, errText2))
+}