summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWataru Ishida <ishida.wataru@lab.ntt.co.jp>2016-09-12 07:35:40 +0000
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-09-12 23:08:18 -0700
commit83b6f07be76a5f5f8ae5b53b664bb8b902dcbf05 (patch)
tree59a8ad9dc97cd4b9c7dee385fc9416836382060d
parent585acb58883e8eb89a0f49d85961a81dd5a43c68 (diff)
test: test monitor feature in unit test instead of scenario test
Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
-rw-r--r--server/server_test.go87
-rw-r--r--test/scenario_test/ci-scripts/travis-build-script.sh3
-rw-r--r--test/scenario_test/monitor_test.py104
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])