diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2018-07-07 13:48:38 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2018-07-07 20:44:25 +0900 |
commit | c4775c42510d1f1ddd55036dc19e982712fa6a0b (patch) | |
tree | 6ec8b61d4338c809e239e3003a2d32d480898e22 /internal/pkg/table/table_test.go | |
parent | b3079759aa13172fcb548a83da9a9653d8d5fed4 (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 'internal/pkg/table/table_test.go')
-rw-r--r-- | internal/pkg/table/table_test.go | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/internal/pkg/table/table_test.go b/internal/pkg/table/table_test.go new file mode 100644 index 00000000..1e91aa6b --- /dev/null +++ b/internal/pkg/table/table_test.go @@ -0,0 +1,180 @@ +// 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 ( + "testing" + "time" + + "github.com/osrg/gobgp/pkg/packet/bgp" + + "github.com/stretchr/testify/assert" +) + +func TestTableDeleteDestByNlri(t *testing.T) { + peerT := TableCreatePeer() + pathT := TableCreatePath(peerT) + ipv4t := NewTable(bgp.RF_IPv4_UC) + for _, path := range pathT { + dest := NewDestination(path.GetNlri(), 0) + ipv4t.setDestination(dest) + } + gdest := ipv4t.GetDestination(pathT[0].GetNlri()) + rdest := ipv4t.deleteDestByNlri(pathT[0].GetNlri()) + assert.Equal(t, rdest, gdest) +} + +func TestTableDeleteDest(t *testing.T) { + peerT := TableCreatePeer() + pathT := TableCreatePath(peerT) + ipv4t := NewTable(bgp.RF_IPv4_UC) + for _, path := range pathT { + dest := NewDestination(path.GetNlri(), 0) + ipv4t.setDestination(dest) + } + dest := NewDestination(pathT[0].GetNlri(), 0) + ipv4t.setDestination(dest) + ipv4t.deleteDest(dest) + gdest := ipv4t.GetDestination(pathT[0].GetNlri()) + assert.Nil(t, gdest) +} + +func TestTableGetRouteFamily(t *testing.T) { + ipv4t := NewTable(bgp.RF_IPv4_UC) + rf := ipv4t.GetRoutefamily() + assert.Equal(t, rf, bgp.RF_IPv4_UC) +} + +func TestTableSetDestinations(t *testing.T) { + peerT := TableCreatePeer() + pathT := TableCreatePath(peerT) + ipv4t := NewTable(bgp.RF_IPv4_UC) + destinations := make(map[string]*Destination) + for _, path := range pathT { + tableKey := ipv4t.tableKey(path.GetNlri()) + dest := NewDestination(path.GetNlri(), 0) + destinations[tableKey] = dest + } + ipv4t.setDestinations(destinations) + ds := ipv4t.GetDestinations() + assert.Equal(t, ds, destinations) +} +func TestTableGetDestinations(t *testing.T) { + peerT := DestCreatePeer() + pathT := DestCreatePath(peerT) + ipv4t := NewTable(bgp.RF_IPv4_UC) + destinations := make(map[string]*Destination) + for _, path := range pathT { + tableKey := ipv4t.tableKey(path.GetNlri()) + dest := NewDestination(path.GetNlri(), 0) + destinations[tableKey] = dest + } + ipv4t.setDestinations(destinations) + ds := ipv4t.GetDestinations() + assert.Equal(t, ds, destinations) +} + +func TestTableKey(t *testing.T) { + tb := NewTable(bgp.RF_IPv4_UC) + n1, _ := bgp.NewPrefixFromRouteFamily(bgp.AFI_IP, bgp.SAFI_UNICAST, "0.0.0.0/0") + d1 := NewDestination(n1, 0) + n2, _ := bgp.NewPrefixFromRouteFamily(bgp.AFI_IP, bgp.SAFI_UNICAST, "0.0.0.0/1") + d2 := NewDestination(n2, 0) + assert.Equal(t, len(tb.tableKey(d1.GetNlri())), 5) + tb.setDestination(d1) + tb.setDestination(d2) + assert.Equal(t, len(tb.GetDestinations()), 2) +} + +func TableCreatePeer() []*PeerInfo { + peerT1 := &PeerInfo{AS: 65000} + peerT2 := &PeerInfo{AS: 65001} + peerT3 := &PeerInfo{AS: 65002} + peerT := []*PeerInfo{peerT1, peerT2, peerT3} + return peerT +} + +func TableCreatePath(peerT []*PeerInfo) []*Path { + bgpMsgT1 := updateMsgT1() + bgpMsgT2 := updateMsgT2() + bgpMsgT3 := updateMsgT3() + pathT := make([]*Path, 3) + for i, msg := range []*bgp.BGPMessage{bgpMsgT1, bgpMsgT2, bgpMsgT3} { + updateMsgT := msg.Body.(*bgp.BGPUpdate) + nlriList := updateMsgT.NLRI + pathAttributes := updateMsgT.PathAttributes + nlri_info := nlriList[0] + pathT[i] = NewPath(peerT[i], nlri_info, false, pathAttributes, time.Now(), false) + } + return pathT +} + +func updateMsgT1() *bgp.BGPMessage { + + origin := bgp.NewPathAttributeOrigin(0) + aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65000})} + aspath := bgp.NewPathAttributeAsPath(aspathParam) + nexthop := bgp.NewPathAttributeNextHop("192.168.50.1") + med := bgp.NewPathAttributeMultiExitDisc(0) + + pathAttributes := []bgp.PathAttributeInterface{ + origin, + aspath, + nexthop, + med, + } + + nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "10.10.10.0")} + return bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri) +} + +func updateMsgT2() *bgp.BGPMessage { + + origin := bgp.NewPathAttributeOrigin(0) + aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65100})} + aspath := bgp.NewPathAttributeAsPath(aspathParam) + nexthop := bgp.NewPathAttributeNextHop("192.168.100.1") + med := bgp.NewPathAttributeMultiExitDisc(100) + + pathAttributes := []bgp.PathAttributeInterface{ + origin, + aspath, + nexthop, + med, + } + + nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "20.20.20.0")} + return bgp.NewBGPUpdateMessage(nil, pathAttributes, nlri) +} +func updateMsgT3() *bgp.BGPMessage { + origin := bgp.NewPathAttributeOrigin(0) + aspathParam := []bgp.AsPathParamInterface{bgp.NewAsPathParam(2, []uint16{65100})} + aspath := bgp.NewPathAttributeAsPath(aspathParam) + nexthop := bgp.NewPathAttributeNextHop("192.168.150.1") + med := bgp.NewPathAttributeMultiExitDisc(100) + + pathAttributes := []bgp.PathAttributeInterface{ + origin, + aspath, + nexthop, + med, + } + + nlri := []*bgp.IPAddrPrefix{bgp.NewIPAddrPrefix(24, "30.30.30.0")} + w1 := bgp.NewIPAddrPrefix(23, "40.40.40.0") + withdrawnRoutes := []*bgp.IPAddrPrefix{w1} + return bgp.NewBGPUpdateMessage(withdrawnRoutes, pathAttributes, nlri) +} |