freebsd-src/tests/sys/net/routing/test_routing_l3.py
Alexander V. Chernikov 7064c94a02 tests: add routing tests for switching between same prefixes
Differential Revision: https://reviews.freebsd.org/D36055
MFC after:	2 weeks
2022-08-07 19:45:25 +00:00

82 lines
3.2 KiB
Python
Executable file

import ipaddress
import pytest
from atf_python.sys.net.tools import ToolsHelper
from atf_python.sys.net.vnet import VnetTestTemplate
class TestIfOps(VnetTestTemplate):
TOPOLOGY = {
"vnet1": {"ifaces": ["if1", "if2"]},
"if1": {"prefixes4": [], "prefixes6": []},
"if2": {"prefixes4": [], "prefixes6": []},
}
@pytest.mark.parametrize("family", ["inet", "inet6"])
@pytest.mark.require_user("root")
def test_change_prefix_route(self, family):
"""Tests that prefix route changes to the new one upon addr deletion"""
vnet = self.vnet_map["vnet1"]
first_iface = vnet.iface_alias_map["if1"]
second_iface = vnet.iface_alias_map["if2"]
if family == "inet":
first_addr = ipaddress.ip_interface("192.0.2.1/24")
second_addr = ipaddress.ip_interface("192.0.2.2/24")
else:
first_addr = ipaddress.ip_interface("2001:db8::1/64")
second_addr = ipaddress.ip_interface("2001:db8::2/64")
first_iface.setup_addr(str(first_addr))
second_iface.setup_addr(str(second_addr))
# At this time prefix should be pointing to the first interface
routes = ToolsHelper.get_routes(family)
px = [r for r in routes if r["destination"] == str(first_addr.network)][0]
assert px["interface-name"] == first_iface.name
# Now delete address from the first interface and verify switchover
first_iface.delete_addr(first_addr.ip)
routes = ToolsHelper.get_routes(family)
px = [r for r in routes if r["destination"] == str(first_addr.network)][0]
assert px["interface-name"] == second_iface.name
@pytest.mark.parametrize(
"family",
[
"inet",
pytest.param("inet6", marks=pytest.mark.xfail(reason="currently fails")),
],
)
@pytest.mark.require_user("root")
def test_change_prefix_route_same_iface(self, family):
"""Tests that prefix route changes to the new ifa upon addr deletion"""
vnet = self.vnet_map["vnet1"]
first_iface = vnet.iface_alias_map["if1"]
if family == "inet":
first_addr = ipaddress.ip_interface("192.0.2.1/24")
second_addr = ipaddress.ip_interface("192.0.2.2/24")
else:
first_addr = ipaddress.ip_interface("2001:db8::1/64")
second_addr = ipaddress.ip_interface("2001:db8::2/64")
first_iface.setup_addr(str(first_addr))
first_iface.setup_addr(str(second_addr))
# At this time prefix should be pointing to the first interface
routes = ToolsHelper.get_routes(family)
px = [r for r in routes if r["destination"] == str(first_addr.network)][0]
assert px["interface-name"] == first_iface.name
# Now delete address from the first interface and verify switchover
first_iface.delete_addr(str(first_addr.ip))
routes = ToolsHelper.get_routes(family)
px = [r for r in routes if r["destination"] == str(first_addr.network)][0]
nhop_kidx = px["nhop"]
assert px["interface-name"] == first_iface.name
nhops = ToolsHelper.get_nhops(family)
nh = [nh for nh in nhops if nh["index"] == nhop_kidx][0]
assert nh["ifa"] == str(second_addr.ip)