headscale/hscontrol/servertest
Kristoffer Dalby 7a20db9f49 types: persist Node JSON slices via named IsZero types
Endpoints, Tags and ApprovedRoutes serialize as JSON on Node. GORM's
struct Updates path skips fields it considers zero, and reflect treats
a nil slice as zero — clearing any of these columns via the State
persist path would leave the previous value in the database.

Introduce Strings, Prefixes and AddrPorts as named slice types whose
IsZero() always reports false, so GORM keeps the column in the UPDATE
regardless of the slice being nil or empty. JSON marshalling is
unchanged: nil serializes to null, empty to []. List() returns the
underlying unnamed slice for callers (mainly testify assertions over
reflect.DeepEqual) that distinguish the named type from its base.

Regenerated types_clone.go and types_view.go follow the field-type
swap. Test assertions across hscontrol/{db,state,servertest} updated
to call .List() where reflect.DeepEqual previously matched the raw
slice type.

Fixes #3110
2026-05-15 11:21:58 +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 via-grant exit-node visibility end-to-end 2026-04-30 19:22:45 +01: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: clear Unhealthy when node leaves HA candidate set 2026-04-29 18:08:39 +01: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