Files

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()