Skip to content

Commit

Permalink
[pytest/test_default_route]: support 4.9 kernel 201911/201811 release (
Browse files Browse the repository at this point in the history
…#1600)


Signed-off-by: Guohan Lu <gulv@microsoft.com>
  • Loading branch information
lguohan authored Apr 24, 2020
1 parent 7d7a5e2 commit 3882d42
Showing 1 changed file with 41 additions and 15 deletions.
56 changes: 41 additions & 15 deletions tests/route/test_default_route.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import re
import pytest
import logging
from common.helpers.assertions import pytest_assert

logger = logging.getLogger(__name__)

Expand All @@ -21,6 +22,19 @@ def test_default_route_set_src(duthost):
nexthop via fc00::76 dev PortChannel0002 weight 1
nexthop via fc00::7a dev PortChannel0003 weight 1
nexthop via fc00::7e dev PortChannel0004 weight 1 pref medium
============ 4.9 kernel ===============
admin@vlab-01:~$ ip route list match 0.0.0.0
default proto 186 src 10.1.0.32 metric 20
nexthop via 10.0.0.57 dev PortChannel0001 weight 1
nexthop via 10.0.0.59 dev PortChannel0002 weight 1
nexthop via 10.0.0.61 dev PortChannel0003 weight 1
nexthop via 10.0.0.63 dev PortChannel0004 weight 1
admin@vlab-01:~$ ip -6 route list match ::
default via fc00::72 dev PortChannel0001 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::76 dev PortChannel0002 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::7a dev PortChannel0003 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::7e dev PortChannel0004 proto 186 src fc00:1::32 metric 20 pref medium
"""

config_facts = duthost.config_facts(host=duthost.hostname, source="running")['ansible_facts']
Expand All @@ -38,24 +52,26 @@ def test_default_route_set_src(duthost):
elif ip.version == 6:
lo_ipv6 = ip

if lo_ipv4 is None:
pytest.fail("cannot find ipv4 Loopback0 address")
if lo_ipv6 is None:
pytest.fail("cannot find ipv6 Loopback0 address")
pytest_assert(lo_ipv4, "cannot find ipv4 Loopback0 address")
pytest_assert(lo_ipv6, "cannot find ipv6 Loopback0 address")

rt = duthost.command("ip route list match 0.0.0.0")['stdout_lines']
m = re.match(r"^default proto bgp src (\S+)", rt[0])
m = re.match(r"^default proto (bgp|186) src (\S+)", rt[0])
if m:
if ipaddress.ip_address(m.group(1)) != lo_ipv4.ip:
pytest.fail("default route set src to wrong IP {} != {}".format(m.group(1), lo_ipv4.ip))
pytest_assert(ipaddress.ip_address(m.group(2)) == lo_ipv4.ip, \
"default route set src to wrong IP {} != {}".format(m.group(1), lo_ipv4.ip))
else:
pytest.fail("default route do not have set src. {}".format(rt))

rt = duthost.command("ip -6 route list match ::")['stdout_lines']
m = re.match(r"^default proto bgp src (\S+)", rt[0])
m1 = re.match(r"default via (\S+) dev (\S+) proto 186 src (\S+)", rt[0])
if m:
if ipaddress.ip_address(m.group(1)) != lo_ipv6.ip:
pytest.fail("default route set src to wrong IP {} != {}".format(m.group(1), lo_ipv6.ip))
pytest_assert(ipaddress.ip_address(m.group(1)) == lo_ipv6.ip, \
"default route set src to wrong IP {} != {}".format(m.group(1), lo_ipv6.ip))
elif m1:
pytest_assert(ipaddress.ip_address(m1.group(3)) == lo_ipv6.ip, \
"default route set src to wrong IP {} != {}".format(m1.group(3), lo_ipv6.ip))
else:
pytest.fail("default route do not have set src. {}".format(rt))

Expand All @@ -68,14 +84,24 @@ def test_default_ipv6_route_next_hop_global_address(duthost):
nexthop via fc00::76 dev PortChannel0002 weight 1
nexthop via fc00::7a dev PortChannel0003 weight 1
nexthop via fc00::7e dev PortChannel0004 weight 1 pref medium
============ 4.9 kernel ===============
admin@vlab-01:~$ ip -6 route list match ::
default via fc00::72 dev PortChannel0001 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::76 dev PortChannel0002 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::7a dev PortChannel0003 proto 186 src fc00:1::32 metric 20 pref medium
default via fc00::7e dev PortChannel0004 proto 186 src fc00:1::32 metric 20 pref medium
"""

rt = duthost.command("ip -6 route list match ::")['stdout_lines']
logger.info("default ipv6 route {}".format(rt))
for l in rt[1:]:
m = re.search(r"nexthop via (\S+)", l)
found_nexthop_via = False
for l in rt:
m = re.search(r"(default|nexthop) via (\S+)", l)
if m:
if ipaddress.ip_address(m.group(1)).is_link_local:
pytest.fail("use link local address {} for nexthop".format(m.group(1)))
else:
pytest.fail("cannot find ipv6 nexthop for default route {}".format(rt))
found_nexthop_via = True
pytest_assert(not ipaddress.ip_address(m.group(2)).is_link_local, \
"use link local address {} for nexthop".format(m.group(2)))

pytest_assert(found_nexthop_via, "cannot find ipv6 nexthop for default route {}".format(rt))

0 comments on commit 3882d42

Please sign in to comment.