Skip to main content
LagerBox 是入口点。构造它的开销很小,并且在您调用方法之前不会产生任何网络流量,因此在测试辅助函数里建一个几乎不花什么代价。

构造

connect() 接受主机名、IP、host:port 或完整 URL。协议默认是 http,端口默认是 9000。

构建器

timeout() 只设置快速命令的预算。长时间运行的操作无论如何都会自行计算更宽的预算 —— 一次 60 秒的 wait_for_level 不会被 10 秒的默认值截断。

环境变量

发现

BoxCapabilities

status().capabilities 说明该 Box 提供哪些端点。
能力标志反映的是路由是否注册,而不是 Box 能否真正完成这项工作。 在容器里没有 BlueZ 的 Box 上,ble_command: true 仍然会让每一次 BLE 调用以 Error::Box 和 HTTP 502 失败。没装 nmcli 时,wifi_command: true 的失败方式也一样。请用这些标志判断端点是否存在,而不是判断它会不会成功。

usb_devices()

从 sysfs 枚举 Box 的 USB 总线。它只需要几毫秒,不需要独占任何资源,因此在等待被测设备重新枚举时可以安全地轮询它。
需要 Box 0.33.0 或更高版本。
每次设备重新枚举,devnum 都会变。在检查设备是否在断电重启后回来时,请匹配 serial,或者匹配 vid/pid。

锁定 Box

共享的实验台需要预留机制,否则两个 CI 作业会同时驱动同一批仪器。
竞争会明确报错。锁定一台别人持有的 Box 会得到 Error::Box、HTTP 409 和 Box is locked by <holder>;以非持有者身份解锁则是 HTTP 403 加同样的信息。解锁一台本来就空闲的 Box 会成功。
lock_guard() 只存在于阻塞客户端上。异步客户端有其他所有的锁方法,但没有 RAII 守卫。

安全限值

按 Net 设定的上限,由 Box 的硬件服务而不是您的测试来强制执行 —— 因此即使测试行为异常,这些上限依然生效。需要 Box 0.35.0 或更高版本。
被拒绝的设定值以 Error::Box 的形式返回:
被拒绝的擦除则是 HTTP 403:
一次 PUT 会替换整条记录。 您留作 None 的字段会被移除,而不是保留。在一个已经有 max_current 上限的 Net 上只设置 max_voltage,会把电流上限丢掉。请先读取当前限值,再在读到的内容上做修改。
上限约束的是设定值,而不是保护动作的触发点。 在 3.6 V 上限下,set_voltage(5.0) 会被拒绝 —— 但 set_ovp(12.0) 会被接受并应用。这类 Net 上被拒绝的 set_ocp 来自仪器自身的硬件限制,而不是来自这个上限。请不要指望用安全限值来约束 OVP 或 OCP 的设定。
这里有意没有 max_power。一次 setter 调用只确立电压或电流之一,绝不会同时确立两者,因此 Box 无法诚实地判定功率上限。所以它干脆拒绝这个键。

说明

  • 句柄借用该客户端,因此只要还有从它派生出来的句柄在用,就要让 LagerBox 保持存活。
  • Box 会按物理仪器串行化访问,因此并行的测试无法在同一台仪器上交错进行 I/O。共享同一个 Net 的测试之间仍然会看到彼此造成的状态变化。
  • nets() 会自动回退到较早的 {"nets": [...]} 响应格式,因此它在早于纯数组格式的 Box 上同样可用。