diff options
author | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2016-05-13 05:36:43 +0000 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-05-14 01:48:33 +0900 |
commit | f580bd8fdb22f5f1876f6fe8803b9beab3c5faca (patch) | |
tree | 187157083e12164fc0637138e864c20200e4c93f /test | |
parent | ce3177c565ac735bfa838ed4757e23830288553c (diff) |
test: enhance route server test
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'test')
-rw-r--r-- | test/lib/gobgp.py | 8 | ||||
-rw-r--r-- | test/scenario_test/ci-scripts/travis-build-script.sh | 3 | ||||
-rw-r--r-- | test/scenario_test/route_server_test2.py | 103 |
3 files changed, 111 insertions, 3 deletions
diff --git a/test/lib/gobgp.py b/test/lib/gobgp.py index 6cd5c57b..459e2c5f 100644 --- a/test/lib/gobgp.py +++ b/test/lib/gobgp.py @@ -173,13 +173,15 @@ class GoBGPContainer(BGPContainer): def get_adj_rib_out(self, peer, prefix='', rf='ipv4'): return self._get_adj_rib('out', peer, prefix, rf) - def get_neighbor_state(self, peer): + def get_neighbor(self, peer): if peer not in self.peers: raise Exception('not found peer {0}'.format(peer.router_id)) peer_addr = self.peers[peer]['neigh_addr'].split('/')[0] cmd = 'gobgp -j neighbor {0}'.format(peer_addr) - output = self.local(cmd, capture=True) - return json.loads(output)['info']['bgp_state'] + return json.loads(self.local(cmd, capture=True)) + + def get_neighbor_state(self, peer): + return self.get_neighbor(peer)['info']['bgp_state'] def clear_policy(self): self.policies = {} diff --git a/test/scenario_test/ci-scripts/travis-build-script.sh b/test/scenario_test/ci-scripts/travis-build-script.sh index e273d38a..1bf4c67c 100644 --- a/test/scenario_test/ci-scripts/travis-build-script.sh +++ b/test/scenario_test/ci-scripts/travis-build-script.sh @@ -36,6 +36,9 @@ PIDS=() sudo PYTHONPATH=$GOBGP/test python route_server_test.py --gobgp-image $GOBGP_IMAGE --test-prefix rs -x & PIDS=("${PIDS[@]}" $!) +sudo PYTHONPATH=$GOBGP/test python route_server_test2.py --gobgp-image $GOBGP_IMAGE --test-prefix rs2 -x & +PIDS=("${PIDS[@]}" $!) + sudo PYTHONPATH=$GOBGP/test python route_server_ipv4_v6_test.py --gobgp-image $GOBGP_IMAGE --test-prefix v6 -x & PIDS=("${PIDS[@]}" $!) diff --git a/test/scenario_test/route_server_test2.py b/test/scenario_test/route_server_test2.py new file mode 100644 index 00000000..f31b91b0 --- /dev/null +++ b/test/scenario_test/route_server_test2.py @@ -0,0 +1,103 @@ +# 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.exabgp import * +import sys +import os +import time +import nose +from noseplugin import OptionParser, parser_option + + +class GoBGPTestBase(unittest.TestCase): + + wait_per_retry = 5 + retry_limit = 15 + + @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) + + g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2') + e1 = ExaBGPContainer(name='e1', asn=65002, router_id='192.168.0.3') + ctns = [g1, g2, e1] + + # advertise a route from route-server-clients + cls.clients = {} + for idx, cli in enumerate((g2, e1)): + route = '10.0.{0}.0/24'.format(idx) + cli.add_route(route) + cls.clients[cli.name] = cli + + initial_wait_time = max(ctn.run() for ctn in ctns) + + time.sleep(initial_wait_time) + + for cli in cls.clients.itervalues(): + g1.add_peer(cli, is_rs_client=True, passwd='passwd', passive=True, prefix_limit=10) + cli.add_peer(g1, passwd='passwd') + + cls.gobgp = g1 + + # test each neighbor state is turned establish + def test_01_neighbor_established(self): + for cli in self.clients.itervalues(): + self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=cli) + + def test_02_add_neighbor(self): + e2 = ExaBGPContainer(name='e2', asn=65001, router_id='192.168.0.4') + time.sleep(e2.run()) + self.gobgp.add_peer(e2, is_rs_client=True) + e2.add_peer(self.gobgp) + + self.gobgp.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=e2) + self.clients[e2.name] = e2 + + def test_03_check_neighbor_rib(self): + rib = self.gobgp.get_local_rib(self.clients['e2']) + self.assertTrue(len(rib) == 1) + self.assertTrue(len(rib[0]['paths']) == 1) + path = rib[0]['paths'][0] + self.assertTrue(65001 not in path['aspath']) + + def test_04_withdraw_path(self): + self.clients['g2'].local('gobgp global rib del 10.0.0.0/24') + time.sleep(1) + info = self.gobgp.get_neighbor(self.clients['g2'])['info'] + self.assertTrue(info['advertised'] == 1) + self.assertTrue('accepted' not in info) # means info['accepted'] == 0 + self.assertTrue('received' not in info) # means info['received'] == 0 + + +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]) |