summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWataru Ishida <ishida.wataru@lab.ntt.co.jp>2016-10-03 15:20:55 +0000
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-10-03 17:04:53 -0700
commit251c32ae0f2658bfa7cefdd22c3aef60c38da1ee (patch)
treece8784bb2674ad043f611fa12c778393cc28f33b
parent00766731ad5e9651c6cbe3cb9753288488147174 (diff)
test: add scenario test for zapi v3
Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
-rw-r--r--.travis.yml7
-rw-r--r--test/lib/gobgp.py18
-rwxr-xr-xtest/scenario_test/ci-scripts/travis-install-script.sh2
-rw-r--r--test/scenario_test/zapi_v3_test.py85
4 files changed, 105 insertions, 7 deletions
diff --git a/.travis.yml b/.travis.yml
index 7792bb6e..7de95b3e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,6 +9,7 @@ script: test/scenario_test/ci-scripts/travis-build-script.sh
env:
global:
- DOCKER_IMAGE=gobgp
+ - FROM_IMAGE=osrg/quagga
matrix:
allow_failures:
@@ -128,6 +129,12 @@ matrix:
sudo: required
services:
- docker
+ - env:
+ - TEST=zapi_v3_test.py FROM_IMAGE=osrg/quagga:v1.0
+ sudo: required
+ services:
+ - docker
+
cache:
pip: true
diff --git a/test/lib/gobgp.py b/test/lib/gobgp.py
index 316e8535..77cd765e 100644
--- a/test/lib/gobgp.py
+++ b/test/lib/gobgp.py
@@ -35,7 +35,8 @@ class GoBGPContainer(BGPContainer):
QUAGGA_VOLUME = '/etc/quagga'
def __init__(self, name, asn, router_id, ctn_image_name='osrg/gobgp',
- log_level='debug', zebra=False, config_format='toml'):
+ log_level='debug', zebra=False, config_format='toml',
+ zapi_version=2):
super(GoBGPContainer, self).__init__(name, asn, router_id,
ctn_image_name)
self.shared_volumes.append((self.config_dir, self.SHARED_VOLUME))
@@ -46,6 +47,7 @@ class GoBGPContainer(BGPContainer):
self.bgp_set = None
self.default_policy = None
self.zebra = zebra
+ self.zapi_version = zapi_version
self.config_format = config_format
def _start_gobgp(self, graceful_restart=False):
@@ -64,9 +66,12 @@ class GoBGPContainer(BGPContainer):
self.local("pkill -INT gobgpd")
def _start_zebra(self):
- cmd = 'cp {0}/zebra.conf {1}/'.format(self.SHARED_VOLUME, self.QUAGGA_VOLUME)
- self.local(cmd)
- cmd = '/usr/lib/quagga/zebra -f {0}/zebra.conf'.format(self.QUAGGA_VOLUME)
+ if self.zapi_version == 2:
+ cmd = 'cp {0}/zebra.conf {1}/'.format(self.SHARED_VOLUME, self.QUAGGA_VOLUME)
+ self.local(cmd)
+ cmd = '/usr/lib/quagga/zebra -f {0}/zebra.conf'.format(self.QUAGGA_VOLUME)
+ else:
+ cmd = 'zebra -u root -g root -f {0}/zebra.conf'.format(self.SHARED_VOLUME)
self.local(cmd, detach=True)
def run(self):
@@ -351,7 +356,8 @@ class GoBGPContainer(BGPContainer):
if self.zebra:
config['zebra'] = {'config':{'enabled': True,
- 'redistribute-route-type-list':['connect']}}
+ 'redistribute-route-type-list':['connect'],
+ 'version': self.zapi_version}}
with open('{0}/gobgpd.conf'.format(self.config_dir), 'w') as f:
print colors.yellow('[{0}\'s new config]'.format(self.name))
@@ -370,7 +376,7 @@ class GoBGPContainer(BGPContainer):
c = CmdBuffer()
c << 'hostname zebra'
c << 'password zebra'
- c << 'log file {0}/zebra.log'.format(self.QUAGGA_VOLUME)
+ c << 'log file {0}/zebra.log'.format(self.SHARED_VOLUME)
c << 'debug zebra packet'
c << 'debug zebra kernel'
c << 'debug zebra rib'
diff --git a/test/scenario_test/ci-scripts/travis-install-script.sh b/test/scenario_test/ci-scripts/travis-install-script.sh
index 43b6885f..5270ac21 100755
--- a/test/scenario_test/ci-scripts/travis-install-script.sh
+++ b/test/scenario_test/ci-scripts/travis-install-script.sh
@@ -4,4 +4,4 @@ echo "travis-install-script.sh"
sudo -H pip --quiet install -r test/pip-requires.txt
-sudo fab -f test/lib/base.py make_gobgp_ctn:tag=$DOCKER_IMAGE
+sudo fab -f test/lib/base.py make_gobgp_ctn:tag=$DOCKER_IMAGE,from_image=$FROM_IMAGE
diff --git a/test/scenario_test/zapi_v3_test.py b/test/scenario_test/zapi_v3_test.py
new file mode 100644
index 00000000..6e6f9b86
--- /dev/null
+++ b/test/scenario_test/zapi_v3_test.py
@@ -0,0 +1,85 @@
+# Copyright (C) 2015 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
+
+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,
+ zebra=True, zapi_version=3)
+
+ g2 = GoBGPContainer(name='g2', asn=65001, router_id='192.168.0.2',
+ ctn_image_name=gobgp_ctn_image_name,
+ log_level=parser_option.gobgp_log_level,
+ zebra=True, zapi_version=3)
+
+ initial_wait_time = max(ctn.run() for ctn in [g1, g2])
+
+ time.sleep(initial_wait_time)
+
+ g1.add_peer(g2)
+ g2.add_peer(g1)
+
+ cls.g1 = g1
+ cls.g2 = g2
+
+ def test_01_neighbor_established(self):
+ self.g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=self.g2)
+
+ def test_02_create_vrf(self):
+ self.g1.local('ip netns add ns01')
+ self.g1.local('ip netns add ns02')
+ self.g2.local('ip netns add ns01')
+ self.g2.local('ip netns add ns02')
+
+ self.g1.local('ip netns exec ns01 ip li set up dev lo')
+ self.g1.local('ip netns exec ns02 ip li set up dev lo')
+ self.g2.local('ip netns exec ns01 ip li set up dev lo')
+ self.g2.local('ip netns exec ns02 ip li set up dev lo')
+
+ self.g1.local("vtysh -c 'en' -c 'conf t' -c 'vrf 1 netns ns01'")
+ self.g1.local("vtysh -c 'en' -c 'conf t' -c 'vrf 2 netns ns02'")
+ self.g2.local("vtysh -c 'en' -c 'conf t' -c 'vrf 1 netns ns01'")
+ self.g2.local("vtysh -c 'en' -c 'conf t' -c 'vrf 2 netns ns02'")
+
+
+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])