mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-06 07:33:01 +02:00
This unfortunately required some restructuring, and as well as extending the run time since we have no way of sending Ethernet frames currently in the test framework (socat would be nice). - Put enable/disable of services before tcpdump start, LLDP lingers ... - Extend run time: 3 -> 20 sec to catch periodic LLDP messages Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
114 lines
3.9 KiB
Python
Executable File
114 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# Verify that basic services like SSDP, mDNS and LLDP can be enabled and
|
|
# disabled. We verify operation and non-operation by using tcpdump.
|
|
#
|
|
# XXX: with socat in the Docker container we could speed up the LLDP
|
|
# detection considerably by sending a probe:
|
|
#
|
|
# echo -ne "\x01\x80\xc2\x00\x00\x0e\x01\x80\xc2\x00\x00\x0e\x88\xcc\x02\x07\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | socat - UDP4-DATAGRAM:255.255.255.255:7010,broadcast
|
|
#
|
|
|
|
import time
|
|
import infamy
|
|
from infamy.ssdp import SsdpClient
|
|
|
|
def verify(enabled, sec):
|
|
"""Verify service traffic, or no traffic in case service not enabled"""
|
|
_, hport = env.ltop.xlate("host", "data")
|
|
|
|
with infamy.IsolatedMacVlan(hport) as netns:
|
|
snif = infamy.Sniffer(netns, "port 1900 or port 5353 or ether proto 0x88cc")
|
|
ssdp = SsdpClient(netns, retries=sec)
|
|
|
|
netns.addip("10.0.0.1")
|
|
netns.addroute("0.0.0.0/0", "10.0.0.1")
|
|
|
|
# Put service enable/disable before starting tcpdump, because
|
|
# LLDP lingers and will send a final shutdown message that
|
|
# otherwise would get in the capture for disable.
|
|
target.put_config_dict("infix-services", {
|
|
"ssdp": {
|
|
"enabled": enabled
|
|
},
|
|
"mdns": {
|
|
"enabled": enabled
|
|
}
|
|
})
|
|
target.put_config_dict("ieee802-dot1ab-lldp", {
|
|
"lldp": {
|
|
"enabled": enabled
|
|
}
|
|
})
|
|
|
|
with snif:
|
|
ssdp.start()
|
|
time.sleep(sec)
|
|
ssdp.stop()
|
|
|
|
return snif.output()
|
|
|
|
with infamy.Test() as test:
|
|
with test.step("Initialize"):
|
|
env = infamy.Env(infamy.std_topology("1x2"))
|
|
target = env.attach("target", "mgmt")
|
|
|
|
with test.step("Set static IPv4 address and disable services"):
|
|
_, tport = env.ltop.xlate("target", "data")
|
|
|
|
target.put_config_dict("ietf-interfaces", {
|
|
"interfaces": {
|
|
"interface": [
|
|
{
|
|
"name": tport,
|
|
"type": "infix-if-type:ethernet",
|
|
"enabled": True,
|
|
"ipv4": {
|
|
"address": [
|
|
{
|
|
"ip": "10.0.0.10",
|
|
"prefix-length": 24
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
})
|
|
target.put_config_dict("infix-services", {
|
|
"ssdp": {
|
|
"enabled": False
|
|
},
|
|
"mdns": {
|
|
"enabled": False
|
|
}
|
|
})
|
|
target.put_config_dict("ieee802-dot1ab-lldp", {
|
|
"lldp": {
|
|
"enabled": False
|
|
}
|
|
})
|
|
|
|
with test.step("Start sniffer and enable services on target ..."):
|
|
rc = verify(True, 20)
|
|
print(rc.stdout)
|
|
# breakpoint()
|
|
if "10.0.0.10.1900 > 10.0.0.1" not in rc.stdout:
|
|
test.fail()
|
|
if "10.0.0.10.5353" not in rc.stdout:
|
|
test.fail()
|
|
if "LLDP" not in rc.stdout:
|
|
test.fail()
|
|
|
|
with test.step("Disable services on target, verify they're not running anymore ..."):
|
|
rc = verify(False, 20)
|
|
print(rc.stdout)
|
|
if "10.0.0.10.1900 > 10.0.0.1" in rc.stdout:
|
|
test.fail()
|
|
if "10.0.0.10.5353" in rc.stdout:
|
|
test.fail()
|
|
if "LLDP" in rc.stdout:
|
|
test.fail()
|
|
|
|
test.succeed()
|