Skip to content

Troubleshooting

Symptoms mapped to causes and fixes.

Symptom Cause Fix
TestE2E is skipped and the run is green with no specs. TESTBENCH_CONTEXT is unset. Use a Task target. The kind workflows refuse an empty context on purpose, and --fail-on-empty turns a run of nothing red.
TESTBENCH_CONTEXT does not name the current kubectl context. The current context changed between confirming and running, or the variable was set by hand. Run the Task target again; it reads the current context itself.
helm release exists: testbench-<pack>-operator in testbench-<pack>-system. Another run is active on that cluster, or a crashed run left the release behind. Wait for the other run, or rerun with FORCE=true.
no Ready pod matches <selector> in namespace <ns>. The operator did not start, or with INSTALL=skip it is not installed where the pack expects it. Read the controller log entry on the failed suite setup, or install the operator first.
the server could not find the requested resource on an assert or apply. The CRD is missing or serves another version than the scenario uses. Check the pack's install.crds and the operator version; TESTBENCH_OPERATOR_VERSION moves both.
not satisfied after 10m0s: object lacks the expected subset. The operator did not reach the expected state in time. Read the namespace and controller logs report entries attached to the failed step: pods, events in time order, and the controller's last lines.
nothing matches Pod valkey.io/cluster=x; a delete that finds nothing is a mistake in the scenario. A selector with a typo. Fix the selector; an empty delete is never a pass.
go step valkey.shardRoles: ... no pod of the shard reports role:master yet. The shard has no primary yet, or the pods are not Running. Give the step more time, or assert readiness before it.
Error response from daemon: toomanyrequests while preloading images. Docker Hub's anonymous pull limit on a shared runner address. Rerun later; the preload pulls each image once, which is the mitigation.
A kept namespace will not delete. Objects with finalizers, and the operator that owns them is gone. Run the pack once more with KEEP=false, or install the operator and delete the namespace afterwards.
label "x:" has nothing after ':' or contains one of &|!,()/. A label Ginkgo cannot filter on. Rename the label.
match.status.conditions is an empty list, which matches anything. An empty value in match, which the subset matcher would treat as a wildcard. Use cel for the check, or name a value.

Reading a failed run

A failed step prints the last reason it was not satisfied, then two report entries: the namespace's pods with their container states and the newest events in time order, and the redacted tail of the controller logs. Addresses, URLs, and values after a password, secret or token key are redacted, because CI logs are public.

On kind in CI, the e2e-kind-reports artifact holds report.json, junit.xml, and, when the run failed, the kind logs of every node under kind-logs/. Locally, task e2e:kind writes the reports to reports/.