test(xmpp): maak de inbound-op-flood-test deterministisch (geen flaky linux-gate) #1456
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1456
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/xmpp-ratelimit-deterministic-clock"
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?
Probleem
De test
a flood of ops from one sender is rate-limited (#1433)intest/xmpp/xmpp_transport_test.dartis flaky onder belasting en velde intermittent de linux-gate (o.a. de linux-gate-run van #1447:Expected: ≤60/Actual: 71; ook eerder opmain). Geen echte regressie — issue #1433 is gesloten (dat is de feature-issue die de rate-limiter toevoegde; deze test verifieert 'm).Oorzaak. De test stuurt 100 ops en verwachtte dat er ~50 doorkwamen. De rate-limiter (
XmppTransport._rateAllow) is een vast-venster-teller opDateTime.now(), begrensd op 50/seconde/sender. De test nam aan dat de hele burst binnen één venster van 1s landt. Op de capacity-1 serial-runner onder CPU-druk rekken de 100 seriële crypto-opens (de demux verwerkt strikt op volgorde, #1420) uit tot >1 seconde, dus opende een tweede venster en kwamen er >50 door. De marge was al opgerekt van ≤60 → ≤80 opmain— een pleister die onder zwaardere last óók kan barsten.Fix — deterministisch i.p.v. een bredere marge
XmppTransportkrijgt een injecteerbare klok (DateTime Function()? now, standaardDateTime.now) — exact het patroon datopenkat_wizard_controller,rehearsal_controllerens3_serviceal gebruiken. De klok voedt zowel de op-rate-limiter als de resync-timers, zodat de transport één tijdbron heeft. Productiegedrag ongewijzigd (default = de echte klok).De flood-test bevriest de klok, zodat alle 100 ops in hetzelfde venster vallen. Dan is de begrenzing exact toetsbaar:
received.length == 50— precies het vensterplafond;De cap staat als één
_rateLimitCap = 50in de test, gekoppeld aan de private lib-constante met een comment; wijzigt de cap, dan faalt de test luid.Verificatie
yes-hogs), plus 20× groen idle. De bevroren klok maakt de check wandklok-onafhankelijk — belasting kán 'm per constructie niet meer beïnvloeden.test/xmpp/xmpp_transport_test.dartgroen (ook de resync-tests, die nu óók via de geïnjecteerde klok lopen).make check→ groen (CHECK_EXIT=0; volledige suite + dekkingsvloeren + conventies/klasseplafonds).make check-secrets→ geen leaks.🤖 Generated with Claude Code