diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-30 21:04:01 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-30 21:04:01 +0900 |
commit | de9a26d9f36ebd9c918c3f7c88764093a54152dc (patch) | |
tree | 9b54677b50b30b04b750677b074b86b86ef243c7 /table/message_test.go | |
parent | 7e7b78e775bb40e0998418c5c294ed2668e3ea1a (diff) |
table: add helper functions to modify PathAttributes for 4 and 2 byte AS.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'table/message_test.go')
-rw-r--r-- | table/message_test.go | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/table/message_test.go b/table/message_test.go new file mode 100644 index 00000000..ce29d899 --- /dev/null +++ b/table/message_test.go @@ -0,0 +1,142 @@ +// Copyright (C) 2014 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 table + +import ( + "github.com/osrg/gobgp/packet" + "github.com/stretchr/testify/assert" + "reflect" + "testing" +) + +func updateMsg1(as []uint16) *bgp.BGPMessage { + origin := bgp.NewPathAttributeOrigin(0) + aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, as)} + aspath := bgp.NewPathAttributeAsPath(aspathParam) + nexthop := bgp.NewPathAttributeNextHop("192.168.50.1") + med := bgp.NewPathAttributeMultiExitDisc(0) + + pathAttributes := []bgp.PathAttributeInterface{ + origin, + aspath, + nexthop, + med, + } + + nlri := []bgp.NLRInfo{*bgp.NewNLRInfo(24, "10.10.10.0")} + return bgp.NewBGPUpdateMessage([]bgp.WithdrawnRoute{}, pathAttributes, nlri) +} + +func TestAs4PathNonAsTrans(t *testing.T) { + as := []uint16{65000, 4000, 40001} + m := updateMsg1(as).Body.(*bgp.BGPUpdate) + originalAsPath := m.PathAttributes[1] + UpdatePathAttrs4ByteAs(m) + assert.Equal(t, reflect.TypeOf(m.PathAttributes[0]).String(), "*bgp.PathAttributeOrigin") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[1]).String(), "*bgp.PathAttributeAsPath") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[2]).String(), "*bgp.PathAttributeNextHop") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[3]).String(), "*bgp.PathAttributeMultiExitDisc") + + asAttr := m.PathAttributes[1].(*bgp.PathAttributeAsPath) + assert.Equal(t, len(asAttr.Value), 1) + for _, param := range asAttr.Value { + asParam := param.(*bgp.As4PathParam) + for i, v := range asParam.AS { + assert.Equal(t, v, as[i]) + } + } + UpdatePathAttrs2ByteAs(m) + assert.Equal(t, m.PathAttributes[1], originalAsPath) +} + +func TestAsPathAsTrans(t *testing.T) { + as := []uint16{65000, 4000, bgp.AS_TRANS, bgp.AS_TRANS, 40001} + m := updateMsg1(as).Body.(*bgp.BGPUpdate) + + m.PathAttributes = append(m.PathAttributes, m.PathAttributes[3]) + as4 := []uint32{400000, 300000} + aspathParam := []*bgp.As4PathParam{bgp.NewAs4PathParam(2, as4)} + m.PathAttributes[3] = bgp.NewPathAttributeAs4Path(aspathParam) + assert.Equal(t, len(m.PathAttributes), 5) + + originalAsPath := m.PathAttributes[1] + originalAs4Path := m.PathAttributes[3] + UpdatePathAttrs4ByteAs(m) + assert.Equal(t, len(m.PathAttributes), 4) + + assert.Equal(t, reflect.TypeOf(m.PathAttributes[0]).String(), "*bgp.PathAttributeOrigin") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[1]).String(), "*bgp.PathAttributeAsPath") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[2]).String(), "*bgp.PathAttributeNextHop") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[3]).String(), "*bgp.PathAttributeMultiExitDisc") + + newAS := []uint32{65000, 4000, 400000, 300000, 40001} + asAttr := m.PathAttributes[1].(*bgp.PathAttributeAsPath) + assert.Equal(t, len(asAttr.Value), 1) + for _, param := range asAttr.Value { + asParam := param.(*bgp.As4PathParam) + for i, v := range asParam.AS { + assert.Equal(t, v, newAS[i]) + } + } + UpdatePathAttrs2ByteAs(m) + assert.Equal(t, len(m.PathAttributes), 5) + assert.Equal(t, m.PathAttributes[1], originalAsPath) + assert.Equal(t, m.PathAttributes[4], originalAs4Path) +} + +func TestAs4PathUnchanged(t *testing.T) { + as4 := []uint32{65000, 4000, 500000, 400010} + m := updateMsg1([]uint16{}).Body.(*bgp.BGPUpdate) + aspathParam := []bgp.AsPathParamInterface{bgp.NewAs4PathParam(2, as4)} + m.PathAttributes[1] = bgp.NewPathAttributeAsPath(aspathParam) + UpdatePathAttrs4ByteAs(m) + assert.Equal(t, len(m.PathAttributes), 4) + + assert.Equal(t, reflect.TypeOf(m.PathAttributes[0]).String(), "*bgp.PathAttributeOrigin") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[1]).String(), "*bgp.PathAttributeAsPath") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[2]).String(), "*bgp.PathAttributeNextHop") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[3]).String(), "*bgp.PathAttributeMultiExitDisc") + + asAttr := m.PathAttributes[1].(*bgp.PathAttributeAsPath) + assert.Equal(t, len(asAttr.Value), 1) + for _, param := range asAttr.Value { + asParam := param.(*bgp.As4PathParam) + for i, v := range asParam.AS { + assert.Equal(t, v, as4[i]) + } + } +} + +func TestAsPathUnchanged(t *testing.T) { + as := []uint16{65000, 4000, 5000, 4001} + m := updateMsg1(as).Body.(*bgp.BGPUpdate) + UpdatePathAttrs2ByteAs(m) + assert.Equal(t, len(m.PathAttributes), 4) + + assert.Equal(t, reflect.TypeOf(m.PathAttributes[0]).String(), "*bgp.PathAttributeOrigin") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[1]).String(), "*bgp.PathAttributeAsPath") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[2]).String(), "*bgp.PathAttributeNextHop") + assert.Equal(t, reflect.TypeOf(m.PathAttributes[3]).String(), "*bgp.PathAttributeMultiExitDisc") + + asAttr := m.PathAttributes[1].(*bgp.PathAttributeAsPath) + assert.Equal(t, len(asAttr.Value), 1) + for _, param := range asAttr.Value { + asParam := param.(*bgp.AsPathParam) + for i, v := range asParam.AS { + assert.Equal(t, v, as[i]) + } + } +} |