diff options
-rw-r--r-- | server/server_test.go | 87 | ||||
-rw-r--r-- | test/scenario_test/ci-scripts/travis-build-script.sh | 3 | ||||
-rw-r--r-- | test/scenario_test/monitor_test.py | 104 |
3 files changed, 87 insertions, 107 deletions
diff --git a/server/server_test.go b/server/server_test.go index c3553932..b9d8263f 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -16,10 +16,13 @@ package server import ( + log "github.com/Sirupsen/logrus" "github.com/osrg/gobgp/config" + "github.com/osrg/gobgp/packet/bgp" "github.com/osrg/gobgp/table" "github.com/stretchr/testify/assert" "testing" + "time" ) func TestModPolicyAssign(t *testing.T) { @@ -52,3 +55,87 @@ func TestModPolicyAssign(t *testing.T) { _, ps, _ := s.GetPolicyAssignment("", table.POLICY_DIRECTION_IMPORT) assert.Equal(len(ps), 2) } + +func TestMonitor(test *testing.T) { + assert := assert.New(test) + s := NewBgpServer() + go s.Serve() + s.Start(&config.Global{ + Config: config.GlobalConfig{ + As: 1, + RouterId: "1.1.1.1", + Port: 10179, + }, + }) + n := &config.Neighbor{ + Config: config.NeighborConfig{ + NeighborAddress: "127.0.0.1", + PeerAs: 2, + }, + Transport: config.Transport{ + Config: config.TransportConfig{ + PassiveMode: true, + }, + }, + } + if err := s.AddNeighbor(n); err != nil { + log.Fatal(err) + } + t := NewBgpServer() + go t.Serve() + t.Start(&config.Global{ + Config: config.GlobalConfig{ + As: 2, + RouterId: "2.2.2.2", + Port: -1, + }, + }) + m := &config.Neighbor{ + Config: config.NeighborConfig{ + NeighborAddress: "127.0.0.1", + PeerAs: 1, + }, + Transport: config.Transport{ + Config: config.TransportConfig{ + RemotePort: 10179, + }, + }, + } + if err := t.AddNeighbor(m); err != nil { + log.Fatal(err) + } + + for { + time.Sleep(time.Second) + if t.GetNeighbor()[0].State.SessionState == config.SESSION_STATE_ESTABLISHED { + break + } + } + + w := s.Watch(WatchBestPath()) + + attrs := []bgp.PathAttributeInterface{ + bgp.NewPathAttributeOrigin(0), + bgp.NewPathAttributeNextHop("10.0.0.1"), + } + if _, err := t.AddPath("", []*table.Path{table.NewPath(nil, bgp.NewIPAddrPrefix(24, "10.0.0.0"), false, attrs, time.Now(), false)}); err != nil { + log.Fatal(err) + } + + ev := <-w.Event() + b := ev.(*WatchEventBestPath) + assert.Equal(len(b.PathList), 1) + assert.Equal(b.PathList[0].GetNlri().String(), "10.0.0.0/24") + assert.Equal(b.PathList[0].IsWithdraw, false) + + if _, err := t.AddPath("", []*table.Path{table.NewPath(nil, bgp.NewIPAddrPrefix(24, "10.0.0.0"), true, attrs, time.Now(), false)}); err != nil { + log.Fatal(err) + } + + ev = <-w.Event() + b = ev.(*WatchEventBestPath) + assert.Equal(len(b.PathList), 1) + assert.Equal(b.PathList[0].GetNlri().String(), "10.0.0.0/24") + assert.Equal(b.PathList[0].IsWithdraw, true) + +} diff --git a/test/scenario_test/ci-scripts/travis-build-script.sh b/test/scenario_test/ci-scripts/travis-build-script.sh index 283716c0..3ea28407 100644 --- a/test/scenario_test/ci-scripts/travis-build-script.sh +++ b/test/scenario_test/ci-scripts/travis-build-script.sh @@ -84,9 +84,6 @@ PIDS=("${PIDS[@]}" $!) sudo PYTHONPATH=$GOBGP/test python bgp_zebra_test.py --gobgp-image $GOBGP_IMAGE --test-prefix z -x & PIDS=("${PIDS[@]}" $!) -sudo PYTHONPATH=$GOBGP/test python monitor_test.py --gobgp-image $GOBGP_IMAGE --test-prefix mon -x & -PIDS=("${PIDS[@]}" $!) - for (( i = 0; i < ${#PIDS[@]}; ++i )) do diff --git a/test/scenario_test/monitor_test.py b/test/scenario_test/monitor_test.py deleted file mode 100644 index 4c5df7c1..00000000 --- a/test/scenario_test/monitor_test.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (C) 2016 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. - -import unittest -from fabric.api import local -from lib import base -from lib.gobgp import * -from lib.quagga import * -import sys -import os -import time -import nose -from noseplugin import OptionParser, parser_option -from itertools import chain -import Queue - - -class GoBGPTestBase(unittest.TestCase): - - @classmethod - def setUpClass(cls): - gobgp_ctn_image_name = parser_option.gobgp_image - base.TEST_PREFIX = parser_option.test_prefix - - g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1', - ctn_image_name=gobgp_ctn_image_name, - log_level=parser_option.gobgp_log_level) - q1 = QuaggaBGPContainer(name='q1', asn=65001, router_id='192.168.0.2') - q2 = QuaggaBGPContainer(name='q2', asn=65002, router_id='192.168.0.3') - q3 = QuaggaBGPContainer(name='q3', asn=65003, router_id='192.168.0.4') - - qs = [q1, q2, q3] - ctns = [g1, q1, q2, q3] - - # advertise a route from q1, q2, q3 - for idx, q in enumerate(qs): - route = '10.0.{0}.0/24'.format(idx+1) - q.add_route(route) - - initial_wait_time = max(ctn.run() for ctn in ctns) - - time.sleep(initial_wait_time) - - for q in qs: - g1.add_peer(q, reload_config=False, passwd='passwd') - q.add_peer(g1, passwd='passwd', passive=True) - - g1.create_config() - g1.reload_config() - - cls.gobgp = g1 - cls.quaggas = {'q1': q1, 'q2': q2, 'q3': q3} - - def test_01_monitor_initial_adv(self): - qu = Queue.Queue() - self.gobgp.monitor_global_rib(qu) - for q in self.quaggas.itervalues(): - self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=q) - print '{0} get established'.format(q.name) - - cnt = 0 - - while True: - info = qu.get(timeout=120) - cnt += 1 - print 'monitor got {0}, cnt = {1}'.format(info, cnt) - if cnt == len(self.quaggas): - break - - def test_02_stop_q1(self): - qu = Queue.Queue() - self.gobgp.monitor_global_rib(qu) - self.quaggas['q1'].stop() - - while True: - info = qu.get(timeout=120) - print 'monitor got {0}'.format(info) - self.assertTrue(info['withdrawal']) - break - - -if __name__ == '__main__': - if os.geteuid() is not 0: - print "you are not root." - sys.exit(1) - output = local("which docker 2>&1 > /dev/null ; echo $?", capture=True) - if int(output) is not 0: - print "docker not found" - sys.exit(1) - - nose.main(argv=sys.argv, addplugins=[OptionParser()], - defaultTest=sys.argv[0]) |