From 3882d42762a958e26203141353203b5b85448706 Mon Sep 17 00:00:00 2001 From: lguohan Date: Fri, 24 Apr 2020 09:45:47 -0700 Subject: [PATCH] [pytest/test_default_route]: support 4.9 kernel 201911/201811 release (#1600) Signed-off-by: Guohan Lu --- tests/route/test_default_route.py | 56 ++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/tests/route/test_default_route.py b/tests/route/test_default_route.py index f32da7dd6e..5df608b07a 100644 --- a/tests/route/test_default_route.py +++ b/tests/route/test_default_route.py @@ -2,6 +2,7 @@ import re import pytest import logging +from common.helpers.assertions import pytest_assert logger = logging.getLogger(__name__) @@ -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'] @@ -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)) @@ -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))