Skip to content

Pre-test sanity check

A 60-second walkthrough to confirm the lab is healthy before triggering a CI run. Save yourself a failed run (and a notified Slack channel) by going through this when something feels off — e.g. after a power outage, a reboot, or a long idle period.

All commands run on the lab host (laryc@labgrid-fcefyn) over SSH.


1. Core services

systemctl status \
  labgrid-coordinator \
  labgrid-exporter \
  pdudaemon \
  ser2net \
  dnsmasq \
  arduino-relay-daemon \
  prometheus \
  grafana-server

All eight should be active (running). Quick fix for any single failed unit:

sudo systemctl restart <unit>
sudo journalctl -u <unit> -n 50 --no-pager

2. Labgrid sees the places

uv run labgrid-client places

Expected: every active place (labgrid-fcefyn-belkin_rt3200_1, _2, _3, bananapi_bpi-r4, openwrt_one, etc.) is listed. If the list is shorter than usual, check labgrid-exporter logs.

Confirm none is stuck-locked from a previous failed run:

uv run labgrid-client who

Stale locks: uv run labgrid-client -p <place> unlock --kick.

3. DUT exporters reachable

Prometheus scrape status:

curl -s http://127.0.0.1:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}'

Every target should be up. A down target usually means the autossh tunnel for that DUT died:

sudo systemctl status dut-metrics-tunnel-<name>
sudo systemctl restart dut-metrics-tunnel-<name>

4. TFTP server has space and is responding

df -h /srv/tftp
ls /srv/tftp/firmwares/ci/ 2>/dev/null | head

If /srv/tftp is more than ~80 % full, trigger the cleanup manually (it normally runs daily via the tftp_cleanup role):

sudo systemctl start tftp-cleanup.service
journalctl -u tftp-cleanup.service -n 50

5. WireGuard tunnel is up (only if running upstream openwrt-tests jobs)

sudo wg show wg0

Expected: latest handshake within the last few minutes. If the handshake is stale:

sudo systemctl restart wg-quick@wg0

6. CI dashboard publishing pipeline (smoke test)

If you suspect the dashboard is stale, manually trigger one collection:

gh workflow run collect-lime-results.yml -R fcefyn-testbed/fcefyn_testbed_utils --ref develop
gh run watch -R fcefyn-testbed/fcefyn_testbed_utils

A green run with Collected N new report.xml file(s) confirms LIME_PACKAGES_TOKEN and BOT_PR_TOKEN are still valid.

Quick "everything looks fine" one-liner

systemctl is-active labgrid-coordinator labgrid-exporter pdudaemon ser2net dnsmasq arduino-relay-daemon prometheus grafana-server

Should print eight lines of active. Any other state - drill down per section above.

When something does break

Debugging FAQ lists the common failure modes (Labgrid lock stuck, DUT not booting via TFTP, wlan0-mesh NO-CARRIER, dashboard 404, etc.) with the fix for each.