mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-27 11:13:02 +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>
112 lines
3.6 KiB
Python
Executable File
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()
|