Skip to content

Commit

Permalink
topotests: add static mpls routing test
Browse files Browse the repository at this point in the history
There is no test that checks for the mpls interface
configuration.
The new test checks that mpls configuration per
interface works when value is enabled or disabled.

Signed-off-by: Philippe Guibert <[email protected]>
  • Loading branch information
pguibert6WIND committed Aug 4, 2023
1 parent 37611b7 commit 6beefe9
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 0 deletions.
16 changes: 16 additions & 0 deletions tests/topotests/static_routing_mpls/r1/zebra.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
hostname r1
ip forwarding
ipv6 forwarding

int r1-eth0
ip addr 192.168.1.1/24
!
int r1-eth1
ip addr 192.168.2.1/24
!
int lo
ip addr 192.0.2.1/32
!
int r1-eth1
ip addr 192.168.2.1/24
!
18 changes: 18 additions & 0 deletions tests/topotests/static_routing_mpls/r2/zebra.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
hostname r2
ip forwarding
ipv6 forwarding

int r2-eth0
ip addr 192.168.2.2/24
!
int r2-eth1
mpls enable
ip addr 192.168.3.2/24
!
int r2-eth2
mpls disable
ip addr 172.31.3.2/24
!
int lo
ip addr 192.0.2.2/32
!
139 changes: 139 additions & 0 deletions tests/topotests/static_routing_mpls/test_static_routing_mpls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
#!/usr/bin/env python
# SPDX-License-Identifier: ISC

#
# test_static_routing_mlpls.py
# Part of NetDEF Topology Tests
#
# Copyright (c) 2023 by 6WIND
#

"""
test_static_routing_mpls.py: Testing MPLS configuration with mpls interface settings
"""

import os
import re
import sys
import pytest
import json
from functools import partial
import functools

# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))

# pylint: disable=C0413
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger

# Required to instantiate the topology builder class.

#####################################################
##
## Network Topology Definition
##
#####################################################


def build_topo(tgen):
"Build function"

tgen.add_router("r1")
tgen.add_router("r2")

switch = tgen.add_switch("sw1")
switch.add_link(tgen.gears["r1"])

switch = tgen.add_switch("sw2")
switch.add_link(tgen.gears["r1"])
switch.add_link(tgen.gears["r2"])

switch = tgen.add_switch("sw3")
switch.add_link(tgen.gears["r2"])

switch = tgen.add_switch("sw4")
switch.add_link(tgen.gears["r2"])


#####################################################
##
## Tests starting
##
#####################################################
def _populate_mpls_labels():
tgen = get_topogen()
cmds_list = ["echo 100000 > /proc/sys/net/mpls/platform_labels"]
for cmd in cmds_list:
for host in ("r1", "r2"):
logger.info("input: " + cmd)
output = tgen.net[host].cmd(cmd)
logger.info("output: " + output)


def setup_module(module):
"Setup topology"
tgen = Topogen(build_topo, module.__name__)
tgen.start_topology()

_populate_mpls_labels()

# This is a sample of configuration loading.
router_list = tgen.routers()
for rname, router in router_list.items():
router.load_config(
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
)

tgen.start_router()


def teardown_module(_mod):
"Teardown the pytest environment"
tgen = get_topogen()

# This function tears down the whole topology.
tgen.stop_topology()


def _check_mpls_state_interface(router, interface, up=True):
output = router.vtysh_cmd("show interface {}".format(interface))
if up and "MPLS enabled" in output:
return None
elif not up and "MPLS enabled" not in output:
return None
return "not good"


def _check_mpls_state(router, interface, configured=True):
test_func = functools.partial(
_check_mpls_state_interface, router, interface, up=configured
)
success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
return success


def test_mpls_configured_on_interface():
"Test 'mpls' state is correctly configured on an unconfigured interfaces"

tgen = get_topogen()
# Don't run this test if we have any failure.
if tgen.routers_have_failure():
pytest.skip(tgen.errors)

logger.info("Checking that MPLS state is on on r2-eth1")
assertmsg = "r2, interface r2-eth1, mpls operational state is off, not expected"
assert _check_mpls_state(tgen.gears["r2"], "r2-eth1"), assertmsg

logger.info("Checking that MPLS state is off on r2-eth2")
assertmsg = "r2, interface r2-eth2, mpls operational state is on, not expected"
assert _check_mpls_state(tgen.gears["r2"], "r2-eth2", False), assertmsg


if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))

0 comments on commit 6beefe9

Please sign in to comment.