Loopback OIDC timeouts and the callback state check have no test coverage #259
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
#258rewrote the OIDC loopback wait onto async tokio and addedcancelling_wait_for_code_does_not_stall_runtime_shutdown. That test binds, cancels after 50ms andasserts on runtime shutdown latency. It never connects to the listener, so it exercises
cancellability and nothing else.
Three properties of the rewritten path have no test at all:
CALLBACK_TIMEOUT(300s), the outer budget around the accept loop.REQUEST_LINE_TIMEOUT(10s), which is what stops one silent connection wedging the sign-in.state != expected_statecomparison in the loopback callback.parse_callback_*covers thepure parser and
pasted_state_is_csrf_checked_but_bare_code_passescovers the manual flow, whichis a different code path.
So if the rewrite had silently broken the 300s budget or the loopback state check, nothing in the
repo would catch it. That is the same shape the gate on #258 flagged in the other direction: the
evidence for a working timeout and a working CSRF check is currently indistinguishable from the
evidence for a broken one.
The probes exist and pass on
116be94. They were written during the #258 gate, run, and removedbefore the verdict so the reviewed tree stayed byte-identical to the head:
They drive a real connection against the bound listener and run in about ten seconds total. Landing
them as tests is the work.
Separately, and not part of this: connections are still handled one at a time, so
REQUEST_LINE_TIMEOUTbounds a single stall but not the aggregate. Roughly thirty stalledconnections would consume the whole 300s budget in sequence. The listener is loopback-only so this
needs a local process, and it is strictly better than the pre-#258 shape where one silent socket
blocked forever.