mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 20:43:02 +02:00
132 lines
3.8 KiB
Python
Executable File
132 lines
3.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import infamy
|
|
import copy
|
|
import infamy.usb as usb
|
|
import time
|
|
import infamy.netconf as netconf
|
|
from infamy.util import until,wait_boot
|
|
|
|
def remove_config(target):
|
|
running = target.get_config_dict("/ietf-hardware:hardware")
|
|
new = copy.deepcopy(running)
|
|
new["hardware"].clear()
|
|
target.put_diff_dicts("ietf-hardware",running,new)
|
|
|
|
with infamy.Test() as test:
|
|
with test.step("Initialize"):
|
|
env = infamy.Env(infamy.std_topology("1x1"))
|
|
target = env.attach("target", "mgmt")
|
|
available=usb.get_usb_ports(target)
|
|
|
|
if len(available) < 1:
|
|
test.skip()
|
|
|
|
with test.step("Lock USB ports"):
|
|
components=[]
|
|
for port in available:
|
|
component = {
|
|
"name": port,
|
|
"state": {
|
|
"admin-state": "locked"
|
|
}
|
|
}
|
|
components.append(component)
|
|
|
|
target.put_config_dict("ietf-hardware", {
|
|
"hardware": {
|
|
"component": components
|
|
}
|
|
})
|
|
|
|
with test.step("Verify USB ports locked"):
|
|
for port in available:
|
|
until(lambda: usb.get_usb_state(target, port) == "locked")
|
|
|
|
|
|
with test.step("Unlock USB ports"):
|
|
components=[]
|
|
for port in available:
|
|
component = {
|
|
"name": port,
|
|
"state": {
|
|
"admin-state": "unlocked"
|
|
}
|
|
}
|
|
components.append(component)
|
|
|
|
target.put_config_dict("ietf-hardware", {
|
|
"hardware": {
|
|
"component": components
|
|
}
|
|
})
|
|
|
|
|
|
with test.step("Verify USB ports unlocked"):
|
|
for port in available:
|
|
until(lambda: usb.get_usb_state(target, port) == "unlocked")
|
|
|
|
if len(available) > 1:
|
|
with test.step("Lock one port"):
|
|
components=[]
|
|
component = {
|
|
"name": available[1],
|
|
"class": "infix-hardware:usb",
|
|
"state": {
|
|
"admin-state": "locked"
|
|
}
|
|
}
|
|
components.append(component)
|
|
|
|
target.put_config_dict("ietf-hardware", {
|
|
"hardware": {
|
|
"component": components
|
|
}
|
|
})
|
|
with test.step("Verify one port is locked and one unlocked"):
|
|
until(lambda: usb.get_usb_state(target, available[1]) == "locked")
|
|
until(lambda: usb.get_usb_state(target, available[0]) == "unlocked")
|
|
|
|
with test.step("Remove all hardware configuration"):
|
|
remove_config(target)
|
|
|
|
with test.step("Verify USB ports locked"):
|
|
for port in available:
|
|
until(lambda: usb.get_usb_state(target, port) == "locked")
|
|
|
|
|
|
with test.step("Unlock USB ports"):
|
|
components=[]
|
|
for port in available:
|
|
component = {
|
|
"name": port,
|
|
"class": "infix-hardware:usb",
|
|
"state": {
|
|
"admin-state": "unlocked"
|
|
}
|
|
}
|
|
components.append(component)
|
|
|
|
target.put_config_dict("ietf-hardware", {
|
|
"hardware": {
|
|
"component": components
|
|
}
|
|
})
|
|
|
|
with test.step("Verify USB ports unlocked"):
|
|
for port in available:
|
|
until(lambda: usb.get_usb_state(target, port) == "unlocked")
|
|
|
|
with test.step("Remove USB configuration, and reboot"):
|
|
remove_config(target)
|
|
target.copy("running", "startup")
|
|
target.reboot()
|
|
if wait_boot(target) == False:
|
|
test.fail()
|
|
target = env.attach("target", "mgmt", factory_default = False)
|
|
|
|
with test.step("Verify that all ports are locked"):
|
|
for port in available:
|
|
until(lambda: usb.get_usb_state(target, port) == "locked")
|
|
test.succeed()
|