Files
infix/test/case/interfaces/veth_delete/test.py
T
Joachim Wiberg 1bbd80d8c7 test: drop leading ietf/infix prefix from directories
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>
2025-11-20 20:23:23 +01:00

112 lines
3.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""Verify that VETH pairs can be deleted
```
veth0b veth0a data1 data2
`---------'
```
Each test step to create, add address, or delete an interace is distinct
from any other step. This to trigger a new configuration "generation".
"""
import infamy
import infamy.iface as iface
with infamy.Test() as test:
with test.step("Set up topology and attach to target DUT"):
env = infamy.Env()
target = env.attach("target", "mgmt")
_, data1 = env.ltop.xlate("target", "data1")
_, data2 = env.ltop.xlate("target", "data2")
veth0a = "veth0a"
veth0b = "veth0b"
with test.step("Create VETH pair"):
target.put_config_dict("ietf-interfaces", {
"interfaces": {
"interface": [
{
"name": veth0a,
"type": "infix-if-type:veth",
"enabled": True,
"infix-interfaces:veth": {
"peer": veth0b
}
},
{
"name": veth0b,
"type": "infix-if-type:veth",
"enabled": True,
"infix-interfaces:veth": {
"peer": veth0a
}
}
]
}
})
with test.step("Verify interfaces 'veth0a' and 'veth0b' exist"):
assert iface.exist(target, veth0a), \
f"Interface <{veth0a}> does not exist."
assert iface.exist(target, veth0b), \
f"Interface <{veth0b}> does not exist."
with test.step("Set IP address on target:data1 (dummy op)"):
target.put_config_dict("ietf-interfaces", {
"interfaces": {
"interface": [{
"name": f"{data1}",
"ipv4": {
"address": [{
"ip": "10.0.0.1",
"prefix-length": 24
}]
}
}]
}
})
with test.step("Set IP address on target:data2 (dummy op)"):
target.put_config_dict("ietf-interfaces", {
"interfaces": {
"interface": [{
"name": f"{data2}",
"ipv4": {
"address": [{
"ip": "20.0.0.1",
"prefix-length": 24
}]
}
}]
}
})
# TODO: need target.del_config_dict() or similar for VETH _pairs_,
# because both interfaces must be removed at the same time.
# with test.step("Delete VETH pair"):
# xpath = f"/ietf-interfaces:interfaces/interface[name='{veth0a}']"
# target.delete_xpath(xpath)
# XXX: temporary workaround
with test.step("Reset configuration"):
# Calls target.test_reset() to apply safe-config
target = env.attach("target", "mgmt")
with test.step("Verify target:data1 and target:data2 still exist"):
assert iface.exist(target, data1), \
f"Interface {data1} missing!"
assert iface.exist(target, data2), \
f"Interface {data2} missing!"
with test.step("Verify VETH pair have been removed"):
assert not iface.exist(target, veth0a), \
f"Interface <{veth0a}> still exists!"
assert not iface.exist(target, veth0b), \
f"Interface <{veth0b}> still exists!"
test.succeed()