mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 20:43:02 +02:00
81 lines
2.9 KiB
Python
Executable File
81 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""DHCP Hostname Priority
|
|
|
|
Verify deterministic hostname management: a DHCP acquired hostname takes
|
|
precedence over a configured hostname. When a DHCP lease ends, or the
|
|
hostname option is removed, the system should revert to the configured
|
|
hostname.
|
|
|
|
"""
|
|
|
|
import infamy, infamy.dhcp
|
|
from infamy.util import until
|
|
|
|
|
|
def verify_hostname(node, expected):
|
|
"""Verify operational hostname matches expected value"""
|
|
data = node.get_data("/ietf-system:system")
|
|
return data["system"]["hostname"] == expected
|
|
|
|
|
|
with infamy.Test() as test:
|
|
DHCP_HOSTNAME = "dhcp-assigned"
|
|
CONF_HOSTNAME = "configured-host"
|
|
|
|
with test.step("Set up topology and attach to target DUT"):
|
|
env = infamy.Env()
|
|
client = env.attach("client", "mgmt")
|
|
_, host = env.ltop.xlate("host", "mgmt")
|
|
_, port = env.ltop.xlate("client", "mgmt")
|
|
|
|
with test.step("Configure static system hostname"):
|
|
client.put_config_dicts({"ietf-system": {
|
|
"system": {
|
|
"hostname": CONF_HOSTNAME
|
|
}
|
|
}})
|
|
|
|
with test.step("Verify configured hostname is set"):
|
|
until(lambda: verify_hostname(client, CONF_HOSTNAME))
|
|
|
|
with infamy.IsolatedMacVlan(host, mode="private") as netns:
|
|
netns.addip("10.0.0.1")
|
|
with infamy.dhcp.Server(netns, ip="10.0.0.42", hostname=DHCP_HOSTNAME):
|
|
with test.step("Enable DHCP client requesting hostname option"):
|
|
client.put_config_dicts({
|
|
"ietf-system": {
|
|
"system": {
|
|
"hostname": CONF_HOSTNAME
|
|
}
|
|
},
|
|
"ietf-interfaces": {
|
|
"interfaces": {
|
|
"interface": [{
|
|
"name": port,
|
|
"ipv4": {
|
|
"infix-dhcp-client:dhcp": {
|
|
"option": [
|
|
{"id": "vendor-class", "value": "infamy"},
|
|
{"id": "hostname"},
|
|
{"id": "netmask"},
|
|
{"id": "router"}
|
|
]
|
|
}
|
|
}
|
|
}]
|
|
}
|
|
}})
|
|
|
|
with test.step("Verify DHCP hostname takes precedence"):
|
|
until(lambda: verify_hostname(client, DHCP_HOSTNAME))
|
|
|
|
with test.step("Drop hostname option from client request"):
|
|
path = f"/ietf-interfaces:interfaces/interface[name='{port}']" \
|
|
+ "/ietf-ip:ipv4/infix-dhcp-client:dhcp/option[id='hostname']"
|
|
client.delete_xpath(path)
|
|
|
|
with test.step("Verify hostname reverts to configured value"):
|
|
until(lambda: verify_hostname(client, CONF_HOSTNAME))
|
|
|
|
test.succeed()
|