mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-29 12:13:01 +02:00
Let's drop the leading IETF or Infix prefixes from tests. Initially the idea was to mimnic the YANG models, but it's difficult to navigate and does not provide any real benefit to developers or end-users. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
105 lines
3.5 KiB
Python
Executable File
105 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Interface status
|
|
|
|
Verify interface status properly propagate changes when an interface
|
|
is disabled and then re-enabled.
|
|
|
|
Both admin-status and oper-status are verified.
|
|
"""
|
|
|
|
import infamy
|
|
import infamy.iface as iface
|
|
|
|
from infamy import until
|
|
|
|
def print_error_message(iface, param, exp_val, act_val):
|
|
return f"'{param}' failure for interface '{iface}'. Expected '{exp_val}', Actual: '{act_val}'"
|
|
|
|
def assert_param(target, interface, parameter, expected_value):
|
|
def check_param():
|
|
actual_value = iface.get_param(target, interface, parameter)
|
|
if actual_value is None:
|
|
raise ValueError(f"Failed to retrieve '{parameter}' for interface '{interface}'")
|
|
return actual_value == expected_value
|
|
|
|
until(check_param)
|
|
|
|
actual_value = iface.get_param(target, interface, parameter)
|
|
assert (expected_value == actual_value), print_error_message(
|
|
iface=interface,
|
|
param = parameter,
|
|
exp_val = expected_value,
|
|
act_val = actual_value
|
|
)
|
|
|
|
def configure_interface(target, iface_name, iface_type=None, enabled=True, ip_address=None, bridge=None):
|
|
|
|
interface_config = {
|
|
"name": iface_name,
|
|
"enabled": enabled
|
|
}
|
|
|
|
if iface_type:
|
|
interface_config["type"] = iface_type
|
|
|
|
if ip_address:
|
|
interface_config["ipv4"] = {
|
|
"address": [
|
|
{
|
|
"ip": ip_address,
|
|
"prefix-length": 24
|
|
}]}
|
|
|
|
if bridge:
|
|
interface_config["infix-interfaces:bridge-port"] = {
|
|
"bridge": bridge
|
|
}
|
|
|
|
target.put_config_dict( "ietf-interfaces", {
|
|
"interfaces": {
|
|
"interface": [
|
|
interface_config
|
|
]}})
|
|
|
|
with infamy.Test() as test:
|
|
with test.step("Set up topology and attach to target DUTs"):
|
|
env = infamy.Env()
|
|
target1 = env.attach("target1", "mgmt")
|
|
target2 = env.attach("target2", "mgmt")
|
|
|
|
_, data1 = env.ltop.xlate("target1", "data")
|
|
_, link1 = env.ltop.xlate("target1", "link")
|
|
|
|
_, iface_under_test = env.ltop.xlate("target2", "link")
|
|
_, host_send_iface = env.ltop.xlate("host", "data")
|
|
_bridge = "br_0"
|
|
|
|
target_address = "10.10.10.2"
|
|
host_address = "10.10.10.1"
|
|
|
|
with test.step("Configure bridge and associated interfaces in target1"):
|
|
configure_interface(target1, _bridge, enabled=True, iface_type="infix-if-type:bridge")
|
|
configure_interface(target1, data1, enabled=True, bridge=_bridge)
|
|
configure_interface(target1, link1, enabled=True, bridge=_bridge)
|
|
|
|
with test.step("Disable interface in target2"):
|
|
configure_interface(target2, iface_under_test, enabled=False)
|
|
|
|
with test.step("Verify the interface is disabled"):
|
|
assert_param(target2, iface_under_test, "admin-status", "down")
|
|
assert_param(target2, iface_under_test, "oper-status", "down")
|
|
|
|
with test.step("Enable the interface and assign an IP address"):
|
|
configure_interface(target2, iface_under_test, enabled=True, ip_address=target_address)
|
|
|
|
with test.step("Verify the interface is enabled"):
|
|
assert_param(target2, iface_under_test, "admin-status", "up")
|
|
assert_param(target2, iface_under_test, "oper-status", "up")
|
|
|
|
with infamy.IsolatedMacVlan(host_send_iface) as send_ns:
|
|
with test.step("Verify it is possible to ping the interface"):
|
|
send_ns.addip(host_address)
|
|
send_ns.must_reach(target_address)
|
|
|
|
test.succeed() |