diff options
-rw-r--r-- | table/table_test.go | 249 |
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) +} |