summaryrefslogtreecommitdiffhomepage
path: root/table/destination_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'table/destination_test.go')
-rw-r--r--table/destination_test.go207
1 files changed, 207 insertions, 0 deletions
diff --git a/table/destination_test.go b/table/destination_test.go
new file mode 100644
index 00000000..03b839a8
--- /dev/null
+++ b/table/destination_test.go
@@ -0,0 +1,207 @@
+// 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 updateMsgD1() *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 updateMsgD2() *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 updateMsgD3() *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)
+}
+func createDestinationCheck(t *testing.T, path Path) (Destination, string) {
+ dest := NewIPv4Destination(path.getNlri())
+ ar := assert.NotNil(t, dest)
+ if !ar {
+ return nil, "NG"
+ }
+ return dest, "OK"
+}
+
+func routeCheck(t *testing.T, dest Destination) string {
+ bgpMsg1 := updateMsgD1()
+ bgpMsg2 := updateMsgD2()
+ bgpMsg3 := updateMsgD3()
+ pr1 := &Peer{VersionNum: 2, RemoteAs: 65000}
+ pr2 := &Peer{VersionNum: 4, RemoteAs: 65001}
+ pr3 := &Peer{VersionNum: 4, RemoteAs: 65002}
+ msg1 := &ProcessMessage{innerMessage: bgpMsg1, fromPeer: pr1}
+ msg2 := &ProcessMessage{innerMessage: bgpMsg2, fromPeer: pr1}
+ msg3 := &ProcessMessage{innerMessage: bgpMsg3, fromPeer: pr2}
+ path1, _ := createPathCheck(t, msg1)
+ path2, _ := createPathCheck(t, msg2)
+ path3, _ := createPathCheck(t, msg3)
+
+ //best path selection
+ dest.addNewPath(path1)
+ dest.addNewPath(path2)
+ dest.addNewPath(path3)
+ dest.addWithdraw(path3)
+
+ _, _, e := dest.Calculate(uint32(100))
+ //bpath, str, e := dest.Calculate()
+ //t.Log(bpath)
+ //t.Log(str)
+ ar := assert.Nil(t, e)
+ if !ar {
+ return "NG"
+ }
+
+ //sent route and remove sent route
+ sroute1 := &SentRoute{path: path1, peer: pr1}
+ sroute2 := &SentRoute{path: path2, peer: pr1}
+ sroute3 := &SentRoute{path: path3, peer: pr2}
+ dest.addSentRoute(sroute1)
+ dest.addSentRoute(sroute2)
+ dest.addSentRoute(sroute3)
+ result := dest.removeSentRoute(pr3)
+ ar = assert.Equal(t, result, false)
+ if !ar {
+ return "NG"
+ }
+ result = dest.removeSentRoute(pr2)
+ ar = assert.Equal(t, result, true)
+ if !ar {
+ return "NG"
+ }
+
+ //remote old path
+ rpath := dest.removeOldPathsFromSource(pr1)
+ t.Log(rpath)
+ //t.Log(dest.getKnownPathList())
+ return "OK"
+}
+
+/*
+func getKnownPathListCheck(t *testing.T, dest Destination) string {
+ paths := dest.getKnownPathList()
+ t.Log(paths)
+ return "OK"
+}
+*/
+
+//getter&setter test
+func dgsTerCheck(t *testing.T, path Path) string {
+ dd := &DestinationDefault{}
+ //check Route Family
+ dd.setRouteFamily(RF_IPv4_UC)
+ rf := dd.getRouteFamily()
+ ar := assert.Equal(t, rf, RF_IPv4_UC)
+ if !ar {
+ return "NG"
+ }
+ //check nlri
+ nlri := bgp.NewNLRInfo(24, "13.2.3.1")
+ dd.setNlri(nlri)
+ r_nlri := dd.getNlri()
+ ar = assert.Equal(t, r_nlri, nlri)
+ if !ar {
+ return "NG"
+ }
+ // check best path reason
+ reason := "reason"
+ dd.setBestPathReason(reason)
+ r_reason := dd.getBestPathReason()
+ ar = assert.Equal(t, r_reason, reason)
+ if !ar {
+ return "NG"
+ }
+ //check best path
+ dd.setBestPath(path)
+ r_path := dd.getBestPath()
+ ar = assert.Equal(t, r_path, path)
+ if !ar {
+ return "NG"
+ }
+ return "OK"
+}
+func TestDestination(t *testing.T) {
+ bgpMsg1 := updateMsgD1()
+ pr1 := &Peer{VersionNum: 2, RemoteAs: 65000}
+ msg := &ProcessMessage{innerMessage: bgpMsg1, fromPeer: pr1}
+ path, _ := createPathCheck(t, msg)
+ t.Log("# CREATE PATH CHECK")
+ dest, result := createDestinationCheck(t, path)
+ t.Log("# CHECK END -> [ ", result, " ]")
+ t.Log("")
+ t.Log("# ROUTE CHECK")
+ result = routeCheck(t, dest)
+ t.Log("# CHECK END -> [ ", result, " ]")
+ t.Log("")
+ t.Log("# GETTER SETTER CHECK")
+ result = dgsTerCheck(t, path)
+ t.Log("# CHECK END -> [ ", result, " ]")
+ t.Log("")
+}