Skip to content

lim.test TestInfo times out matching dinfo.systemAdapter.status.ports.ifname even though EVE publishes valid systemAdapter info #1166

Description

@eriknordmark

Summary

tests/lim/testdata/info_test.txt (the info_test step in the smoke suite) times out at the 5-minute -timewait waiting for the pattern

InfoContent.dinfo.systemAdapter.status.ports.ifname:.*eth[01].*

…even though the device is healthy, posting info messages, and those messages contain exactly that data.

This test passed in <5 s on April 22 against the same eve-api/go proto version (v0.0.0-20260114160322-5feda2767927 in eden, v0.0.0-20260420100351-253db6a73b76 in pillar). It now hangs and times out against the same proto versions, in a fresh smoke run.

Repro

Standard smoke run against a COVER=y EVE built from lf-edge/eve master + the test-coverage PRs (#5901, #5914, #5915, #5922, #5923, #5925), with eden master + #1152, #1162, #1163 (ctrl_encrypt_cert_change), #1164, #1165 (nim-eden-tests), #1161 merged. (None of these touch the systemAdapter info-publish path.)

Adam: locally-built lfedge/adam:0.0.65-pr152 (lf-edge/adam#152 merged on top of master).

Diagnostics

EVE-side: 7 info POSTs to adam during the 5-min test window. 26 of those across the run are ZiDevice messages, every one of them contains dinfo.systemAdapter.

Decoded JSON of a stored ZiDevice info entry from redis (xrange INFO_EVE_<uuid>):

"systemAdapter": {
  "status": [
    {
      "version": 1,
      "key": "lastresort",
      "lastSucceeded": "2026-05-10T07:48:27...",
      "ports": [
        { "ifname": "eth0", "name": "eth0", "isMgmt": true, ... },
        { "ifname": "eth1", "name": "eth1", "isMgmt": true, ... }
      ]
    }
  ]
}

So dinfo.systemAdapter.status[0].ports[0].ifname == "eth0" and ports[1].ifname == "eth1" — exactly what the test pattern asks for.

lim.test log:

=== RUN   TestInfo
lim_test.go:274: time: 2026-05-10T09:53:44+02:00 out: Wait for info of ... number=1 timewait=5m0s
testContext.go:291: WaitForProc terminated by timeout 5m0s
testContext.go:274: WaitForProcWithErrorCallback terminated by timeout 5m0s
--- FAIL: TestInfo (300.00s)

Hypotheses

  • The proto-path resolver in lim.test (or one of its einfo helpers) treats systemAdapter as a repeated message (i.e. expects dinfo.systemAdapter[].status...) when the proto actually wraps it as a singular message containing a repeated status field. The wrapper would explain why the path no longer resolves even though the data is present.
  • Alternatively, a recent change to einfo.InfoNew (or wherever the live-stream watcher demultiplexes incoming entries from adam's redis stream) may be skipping ZiDevice messages or applying a stricter type check.

Both other lim.test tests in smoke (log_test, ssh, eve_restart) passed normally, so basic adam ↔ lim.test ↔ controller wiring is fine — the regression appears specific to dinfo.systemAdapter path resolution / matching.

Workaround

For coverage runs, the failure is cosmetic: the rest of smoke and downstream suites continue without it. Treating it as a known flake until it's diagnosed.

Asks

  1. Identify whether the regression lives in the proto-path resolver or in einfo.InfoNew (or in the walker that decides which paths inside systemAdapter are addressable).
  2. Add a unit test for the resolver against a recorded ZiDevice fixture so future regressions on this path don't bisect-bisect through 5-minute timeouts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions