headscale/hscontrol/servertest
Kristoffer Dalby fb8eecae25 state: defer HA failover when probe target reconnected mid-cycle
The HA prober dispatches a PingRequest, waits ProbeTimeout (5s), and
marks the node unhealthy if no callback arrives. A node that bounced
its poll session between probe cycles satisfies two conditions that
conspire to fail TestHASubnetRouterFailover: a probe queued against
the previous session is silently dropped when the worker writes to
the closed connection (timeout always fires), and a probe sent
immediately after reconnect lands while wgengine is still rebuilding
magicsock state from the new netmap. Either path installs a spurious
unhealthy bit, which sends the preserved-primary anti-flap the wrong
way.

Record the session observed at dispatch time and drop the timeout
path if the node reconnected since. Require the session to survive
a full probe cycle before a timeout can drive a failover.
2026-05-18 17:18:08 +02:00
..
assertions.go hscontrol/servertest: add policy, route, ephemeral, and content tests 2026-03-19 07:05:58 +01:00
client.go servertest: use memnet networking and add WithNodeExpiry option 2026-04-08 13:00:22 +01:00
connect_race_test.go state: switch consumers to NodeStore primary routes 2026-04-29 18:08:39 +01:00
consistency_test.go hscontrol/servertest: add policy, route, ephemeral, and content tests 2026-03-19 07:05:58 +01:00
content_test.go hscontrol/servertest: add policy, route, ephemeral, and content tests 2026-03-19 07:05:58 +01:00
ephemeral_test.go state: replace zcache with bounded LRU for auth cache 2026-04-10 14:09:57 +01:00
grants_test.go servertest: cover broader-dst via grant in filter test 2026-05-18 14:02:00 +02:00
ha_dynamic_test.go state: switch consumers to NodeStore primary routes 2026-04-29 18:08:39 +01:00
ha_health_test.go state: defer HA failover when probe target reconnected mid-cycle 2026-05-18 17:18:08 +02:00
harness.go hscontrol/servertest: add policy, route, ephemeral, and content tests 2026-03-19 07:05:58 +01:00
issues_test.go types: persist Node JSON slices via named IsZero types 2026-05-15 11:21:58 +02:00
lifecycle_test.go hscontrol/servertest: expand issue tests to 24 scenarios, surface 4 issues 2026-03-19 07:05:58 +01:00
nodeattrs_test.go types/config, types/node: model default-auto-update from auto_update.enabled 2026-05-13 14:22:30 +02:00
ping_test.go noise: reject non-HEAD on PingResponseHandler 2026-04-17 16:31:49 +01:00
policy_test.go servertest: add regression tests for via grant filter rules 2026-04-01 14:10:42 +01:00
poll_race_test.go hscontrol/servertest: add race, stress, and poll race tests 2026-03-19 07:05:58 +01:00
race_test.go hscontrol/servertest: add race, stress, and poll race tests 2026-03-19 07:05:58 +01:00
routes_test.go servertest, integration: cover HA both-offline recovery 2026-04-29 18:08:39 +01:00
server.go mapper, state: deliver nodeAttrs through MapResponse and harden nextdns DoH rewrite 2026-05-13 14:22:30 +02:00
stress_test.go hscontrol/servertest: add race, stress, and poll race tests 2026-03-19 07:05:58 +01:00
via_compat_test.go servertest: add via grant map compat tests 2026-04-17 16:31:49 +01:00
via_ha_compat_test.go servertest: add TestViaGrantHACompat for via+HA compat tests 2026-04-17 16:31:49 +01:00
weather_test.go hscontrol/servertest: add control plane lifecycle and consistency tests 2026-03-19 07:05:58 +01:00