summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--table/table_test.go249
1 files changed, 249 insertions, 0 deletions
diff --git a/table/table_test.go b/table/table_test.go
new file mode 100644
index 00000000..715177dc
--- /dev/null
+++ b/table/table_test.go
@@ -0,0 +1,249 @@
+// 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 (
+ //"fmt"
+ "github.com/osrg/gobgp/packet"
+ "github.com/stretchr/testify/assert"
+ //"net"
+ "testing"
+)
+
+func TestTableCreateDestDefault(t *testing.T) {
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ td := NewTableDefault(0, coreService)
+ nlri := bgp.NewNLRInfo(24, "13.2.3.1")
+ cd := td.createDest(nlri)
+ assert.Nil(t, cd)
+}
+
+func TestTableTableKeyDefault(t *testing.T) {
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ td := NewTableDefault(0, coreService)
+ nlri := bgp.NewNLRInfo(24, "13.2.3.1")
+ tk := td.tableKey(nlri)
+ assert.Nil(t, tk)
+}
+
+func TestTableInsertSentRoute(t *testing.T) {
+ peerT := TableCreatePeer()
+ msgT := TableCreateMSG(peerT)
+ pathT := TableCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ ipv4t.setDestination(tableKey.String(), dest)
+ }
+ sroute := &SentRoute{path: pathT[0], peer: peerT[0]}
+ insertSentRoute(ipv4t, sroute)
+ tableKey := ipv4t.tableKey(pathT[0].getNlri())
+ dest := ipv4t.getDestination(tableKey.String())
+ sr := dest.removeSentRoute(peerT[0])
+ assert.Equal(t, sr, true)
+}
+
+func TestTableCleanupPathsForPeer(t *testing.T) {
+ peerT := TableCreatePeer()
+ msgT := TableCreateMSG(peerT)
+ pathT := TableCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ ipv4t.setDestination(tableKey.String(), dest)
+ }
+ sroute := &SentRoute{path: pathT[0], peer: peerT[0]}
+ insertSentRoute(ipv4t, sroute)
+ ipv4t.cleanupPathsForPeer(peerT[0])
+ tableKey := ipv4t.tableKey(pathT[0].getNlri())
+ dest := ipv4t.getDestination(tableKey.String())
+ cpfp := dest.removeSentRoute(peerT[0])
+ assert.Equal(t, cpfp, false)
+}
+
+func TestTableDeleteDestByNlri(t *testing.T) {
+ peerT := TableCreatePeer()
+ msgT := TableCreateMSG(peerT)
+ pathT := TableCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ ipv4t.setDestination(tableKey.String(), dest)
+ }
+ tableKey := ipv4t.tableKey(pathT[0].getNlri())
+ gdest := ipv4t.getDestination(tableKey.String())
+ rdest := deleteDestByNlri(ipv4t, pathT[0].getNlri())
+ assert.Equal(t, rdest, gdest)
+}
+
+func TestTableDeleteDest(t *testing.T) {
+ peerT := TableCreatePeer()
+ msgT := TableCreateMSG(peerT)
+ pathT := TableCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ ipv4t.setDestination(tableKey.String(), dest)
+ }
+ tableKey := ipv4t.tableKey(pathT[0].getNlri())
+ dest := ipv4t.createDest(pathT[0].getNlri())
+ ipv4t.setDestination(tableKey.String(), dest)
+ deleteDest(ipv4t, dest)
+ gdest := ipv4t.getDestination(tableKey.String())
+ assert.Nil(t, gdest)
+}
+
+func TestTableGetRouteFamily(t *testing.T) {
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ rf := ipv4t.getRoutefamily()
+ assert.Equal(t, rf, RF_IPv4_UC)
+}
+func TestTableGetCoreService(t *testing.T) {
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ cs := ipv4t.getCoreService()
+ assert.Equal(t, cs, coreService)
+}
+
+func TestTableSetDestinations(t *testing.T) {
+ peerT := TableCreatePeer()
+ msgT := TableCreateMSG(peerT)
+ pathT := TableCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ destinations := make(map[string]Destination)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ destinations[tableKey.String()] = dest
+ }
+ ipv4t.setDestinations(destinations)
+ ds := ipv4t.getDestinations()
+ assert.Equal(t, ds, destinations)
+}
+func TestTableGetDestinations(t *testing.T) {
+ peerT := DestCreatePeer()
+ msgT := DestCreateMSG(peerT)
+ pathT := DestCreatePath(msgT)
+ coreService := &CoreService{CommonConf: &Commons{}, NeighborsConf: &Neighbors{}}
+ ipv4t := NewIPv4Table(0, coreService)
+ destinations := make(map[string]Destination)
+ for _, path := range pathT {
+ tableKey := ipv4t.tableKey(path.getNlri())
+ dest := ipv4t.createDest(path.getNlri())
+ destinations[tableKey.String()] = dest
+ }
+ ipv4t.setDestinations(destinations)
+ ds := ipv4t.getDestinations()
+ assert.Equal(t, ds, destinations)
+}
+
+func TableCreatePeer() []*Peer {
+ peerT1 := &Peer{VersionNum: 4, RemoteAs: 65000}
+ peerT2 := &Peer{VersionNum: 4, RemoteAs: 65001}
+ peerT3 := &Peer{VersionNum: 4, RemoteAs: 65002}
+ peerT := []*Peer{peerT1, peerT2, peerT3}
+ return peerT
+}
+func TableCreateMSG(peerT []*Peer) []*ProcessMessage {
+ bgpMsgT1 := updateMsgT1()
+ bgpMsgT2 := updateMsgT2()
+ bgpMsgT3 := updateMsgT3()
+ msgT1 := &ProcessMessage{innerMessage: bgpMsgT1, fromPeer: peerT[0]}
+ msgT2 := &ProcessMessage{innerMessage: bgpMsgT2, fromPeer: peerT[1]}
+ msgT3 := &ProcessMessage{innerMessage: bgpMsgT3, fromPeer: peerT[2]}
+ msgT := []*ProcessMessage{msgT1, msgT2, msgT3}
+ return msgT
+}
+func TableCreatePath(msgs []*ProcessMessage) []Path {
+ pathT := make([]Path, 3)
+ for i, msg := range msgs {
+ updateMsgT := msg.innerMessage.Body.(*bgp.BGPUpdate)
+ nlriList := updateMsgT.NLRI
+ pathAttributes := updateMsgT.PathAttributes
+ nlri_info := nlriList[0]
+ pathT[i] = CreatePath(msg.fromPeer, &nlri_info, pathAttributes, 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.NLRInfo{*bgp.NewNLRInfo(24, "10.10.10.0")}
+ withdrawnRoutes := []bgp.WithdrawnRoute{}
+ return bgp.NewBGPUpdateMessage(withdrawnRoutes, 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.NLRInfo{*bgp.NewNLRInfo(24, "20.20.20.0")}
+ withdrawnRoutes := []bgp.WithdrawnRoute{}
+ return bgp.NewBGPUpdateMessage(withdrawnRoutes, 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.NLRInfo{*bgp.NewNLRInfo(24, "30.30.30.0")}
+ w1 := bgp.WithdrawnRoute{*bgp.NewIPAddrPrefix(23, "40.40.40.0")}
+ withdrawnRoutes := []bgp.WithdrawnRoute{w1}
+ return bgp.NewBGPUpdateMessage(withdrawnRoutes, pathAttributes, nlri)
+}