From 5834355b6342b7f9ab43da8e97b519f112693d09 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 24 Jan 2021 13:55:37 +0100 Subject: smoketest: ospfv3: initial testcases --- smoketest/scripts/cli/test_protocols_ospf.py | 27 +----- smoketest/scripts/cli/test_protocols_ospfv3.py | 123 +++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 23 deletions(-) create mode 100755 smoketest/scripts/cli/test_protocols_ospfv3.py diff --git a/smoketest/scripts/cli/test_protocols_ospf.py b/smoketest/scripts/cli/test_protocols_ospf.py index f5fc75084..d78528365 100755 --- a/smoketest/scripts/cli/test_protocols_ospf.py +++ b/smoketest/scripts/cli/test_protocols_ospf.py @@ -37,6 +37,9 @@ class TestProtocolsOSPF(unittest.TestCase): self.session.set(['policy', 'route-map', route_map, 'rule', route_map_seq, 'action', 'permit']) def tearDown(self): + # Check for running process + self.assertTrue(process_named_running(PROCESS_NAME)) + self.session.delete(['policy', 'route-map', route_map]) self.session.delete(base_path) self.session.commit() @@ -53,8 +56,6 @@ class TestProtocolsOSPF(unittest.TestCase): self.assertIn(f' auto-cost reference-bandwidth 100', frrconfig) self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_02_simple(self): router_id = '127.0.0.1' @@ -80,8 +81,6 @@ class TestProtocolsOSPF(unittest.TestCase): self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults self.assertIn(f' default-metric {metric}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_03_access_list(self): acl = '100' @@ -103,12 +102,9 @@ class TestProtocolsOSPF(unittest.TestCase): self.assertIn(f' timers throttle spf 200 1000 10000', frrconfig) # defaults for ptotocol in protocols: self.assertIn(f' distribute-list {acl} out {ptotocol}', frrconfig) # defaults - - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) - self.session.delete(['policy', 'access-list', acl]) + def test_ospf_04_default_originate(self): seq = '100' metric = '50' @@ -135,8 +131,6 @@ class TestProtocolsOSPF(unittest.TestCase): frrconfig = getFRROSPFconfig() self.assertIn(f' default-information originate always metric {metric} metric-type {metric_type} route-map {route_map}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_05_options(self): global_distance = '128' @@ -179,8 +173,6 @@ class TestProtocolsOSPF(unittest.TestCase): frrconfig = getFRROSPFconfig() self.assertIn(f' distance ospf intra-area {intra_area} inter-area {inter_area} external {external}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_06_neighbor(self): priority = '10' @@ -199,8 +191,6 @@ class TestProtocolsOSPF(unittest.TestCase): for neighbor in neighbors: self.assertIn(f' neighbor {neighbor} priority {priority} poll-interval {poll_interval}', frrconfig) # default - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_07_passive_interface(self): self.session.set(base_path + ['passive-interface', 'default']) @@ -218,8 +208,6 @@ class TestProtocolsOSPF(unittest.TestCase): for interface in interfaces: self.assertIn(f' no passive-interface {interface}', frrconfig) # default - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_08_redistribute(self): metric = '15' @@ -244,8 +232,6 @@ class TestProtocolsOSPF(unittest.TestCase): else: self.assertIn(f' redistribute {protocol} metric {metric} metric-type {metric_type} route-map {route_map}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_09_area(self): area = '0' @@ -262,8 +248,6 @@ class TestProtocolsOSPF(unittest.TestCase): for network in networks: self.assertIn(f' network {network} area {area}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) def test_ospf_10_virtual_link(self): area = '10' @@ -289,8 +273,5 @@ class TestProtocolsOSPF(unittest.TestCase): self.assertIn(f' area {area} shortcut {shortcut}', frrconfig) self.assertIn(f' area {area} virtual-link {virtual_link} hello-interval {hello} retransmit-interval {retransmit} transmit-delay {transmit} dead-interval {dead}', frrconfig) - # Check for running process - self.assertTrue(process_named_running(PROCESS_NAME)) - if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/smoketest/scripts/cli/test_protocols_ospfv3.py b/smoketest/scripts/cli/test_protocols_ospfv3.py new file mode 100755 index 000000000..297d5d996 --- /dev/null +++ b/smoketest/scripts/cli/test_protocols_ospfv3.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import unittest + +from vyos.configsession import ConfigSession +from vyos.ifconfig import Section +from vyos.util import cmd +from vyos.util import process_named_running + +PROCESS_NAME = 'ospf6d' +base_path = ['protocols', 'ospfv3'] + + +def getFRROSPFconfig(): + return cmd('vtysh -c "show run" | sed -n "/router ospf6/,/^!/p"') + +class TestProtocolsOSPFv3(unittest.TestCase): + def setUp(self): + self.session = ConfigSession(os.getpid()) + + def tearDown(self): + # Check for running process + self.assertTrue(process_named_running(PROCESS_NAME)) + + self.session.delete(base_path) + self.session.commit() + del self.session + + + def test_ospfv3_01_basic(self): + area = '0' + seq = '10' + prefix = '2001:db8::/32' + acl_name = 'foo-acl-100' + router_id = '192.0.2.1' + + self.session.set(['policy', 'access-list6', acl_name, 'rule', seq, 'action', 'permit']) + self.session.set(['policy', 'access-list6', acl_name, 'rule', seq, 'source', 'any']) + + self.session.set(base_path + ['parameters', 'router-id', router_id]) + self.session.set(base_path + ['area', area, 'range', prefix, 'advertise']) + self.session.set(base_path + ['area', area, 'export-list', acl_name]) + self.session.set(base_path + ['area', area, 'import-list', acl_name]) + + interfaces = Section.interfaces('ethernet') + for interface in interfaces: + self.session.set(base_path + ['area', area, 'interface', interface]) + + # commit changes + self.session.commit() + + # Verify FRR ospfd configuration + frrconfig = getFRROSPFconfig() + self.assertIn(f'router ospf6', frrconfig) + self.assertIn(f' area {area} range {prefix}', frrconfig) + self.assertIn(f' ospf6 router-id {router_id}', frrconfig) + self.assertIn(f' area {area} import-list {acl_name}', frrconfig) + self.assertIn(f' area {area} export-list {acl_name}', frrconfig) + + for interface in interfaces: + self.assertIn(f' interface {interface} area {area}', frrconfig) + + self.session.delete(['policy', 'access-list6', acl_name]) + + + def test_ospfv3_02_distance(self): + dist_global = '200' + dist_external = '110' + dist_inter_area = '120' + dist_intra_area = '130' + + self.session.set(base_path + ['distance', 'global', dist_global]) + self.session.set(base_path + ['distance', 'ospfv3', 'external', dist_external]) + self.session.set(base_path + ['distance', 'ospfv3', 'inter-area', dist_inter_area]) + self.session.set(base_path + ['distance', 'ospfv3', 'intra-area', dist_intra_area]) + + # commit changes + self.session.commit() + + # Verify FRR ospfd configuration + frrconfig = getFRROSPFconfig() + self.assertIn(f'router ospf6', frrconfig) + self.assertIn(f' distance {dist_global}', frrconfig) + self.assertIn(f' distance ospf6 intra-area {dist_intra_area} inter-area {dist_inter_area} external {dist_external}', frrconfig) + + + def test_ospfv3_03_redistribute(self): + route_map = 'foo-bar' + route_map_seq = '10' + redistribute = ['bgp', 'connected', 'kernel', 'ripng', 'static'] + + self.session.set(['policy', 'route-map', route_map, 'rule', route_map_seq, 'action', 'permit']) + + for protocol in redistribute: + self.session.set(base_path + ['redistribute', protocol, 'route-map', route_map]) + + # commit changes + self.session.commit() + + # Verify FRR ospfd configuration + frrconfig = getFRROSPFconfig() + self.assertIn(f'router ospf6', frrconfig) + for protocol in redistribute: + self.assertIn(f' redistribute {protocol} route-map {route_map}', frrconfig) + + +if __name__ == '__main__': + unittest.main(verbosity=2) -- cgit v1.2.3