headscale/hscontrol/types
Kristoffer Dalby 078b9e308f policy/v2: SaaS-derived compat tests for nodeAttrs
Adds a data-driven test that loads testdata/nodeattrs_results/*.hujson
and diffs the captured SaaS-rendered netmaps against headscale's
compileNodeAttrs output. Each capture is one scenario the SaaS
control plane has rendered against the same policy headscale is asked
to compile -- the test enforces shape parity per node.

tailnet_state_caps.go enumerates the caps SaaS emits where headscale
has no equivalent concept yet (user-role admin/owner, tailnet lock,
services host, app connectors, internal magicsock and SSH tuning,
tailnet-state metadata) plus the always-on baseline (admin, ssh,
file-sharing) and the taildrive pair. stripUnmodelledTailnetStateCaps
filters both sides of cmp.Diff so the comparison focuses on the
policy-driven caps. PeerCapMap encodes which caps the Tailscale
client reads from the peer view (suggest-exit-node when exit routes
are approved, etc.) for use by the mapper.

testcapture switches to typed tailcfg/netmap/filtertype/apitype
values so schema drift between the capture tool and headscale
becomes a compile error rather than a silent test failure. Existing
compat suites (acl, grants, routes, ssh, issue_3212) move to the
typed shape.

The 53 SelfNode netmap captures and the 7 anonymizer-corrupted
suggest-charmander -> suggest-exit-node restorations in
routes_results / issue_3212 ride along.
2026-05-13 14:22:30 +02:00
..
change change: document PingRequest merge first-wins foot-gun 2026-04-17 16:31:49 +01:00
testcapture policy/v2: SaaS-derived compat tests for nodeAttrs 2026-05-13 14:22:30 +02:00
testdata Restore support for "Override local DNS" (#2438) 2025-04-17 17:16:59 +02:00
api_key.go types: add MarshalZerologObject to domain types 2026-02-06 07:40:29 +01:00
common.go oidc: add confirmation page for node registration 2026-04-10 14:09:57 +01:00
common_test.go oidc: add confirmation page for node registration 2026-04-10 14:09:57 +01:00
config.go config, types: move randomize_client_port from server config to policy file 2026-05-13 14:22:30 +02:00
config_test.go types: omit secret fields from JSON marshalling 2026-04-10 14:09:57 +01:00
const.go improve testing of route failover logic 2024-04-15 12:31:53 +02:00
debug_routes.go types: move DebugRoutes from routes to types 2026-04-29 18:08:39 +01:00
main_test.go all: fix test flakiness and improve test infrastructure 2026-03-14 02:52:28 -07:00
node.go config, types: move randomize_client_port from server config to policy file 2026-05-13 14:22:30 +02:00
node_benchmark_test.go types: avoid NodeView clone in CanAccess 2026-02-26 19:15:07 -08:00
node_tags_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
node_test.go hscontrol: route hostname handling through dnsname and NodeStore 2026-04-18 15:12:21 +01:00
policy.go feat: implements apis for managing headscale policy (#1792) 2024-07-18 07:38:25 +02:00
preauth_key.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
preauth_key_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
registration.go state: replace zcache with bounded LRU for auth cache 2026-04-10 14:09:57 +01:00
routes.go Redo route code (#2422) 2025-02-26 16:22:55 +01:00
testlog.go hscontrol/types: silence zerolog by default in tests 2026-04-17 16:31:49 +01:00
types_clone.go hscontrol/types: regenerate types_clone.go for viewer bump 2026-05-11 08:46:12 +01:00
types_view.go types: add Unhealthy and SessionEpoch fields to Node 2026-04-29 18:08:39 +01:00
users.go oidc: handle groups claim as string or array (FlexibleStringSlice) 2026-05-04 15:26:53 +02:00
users_test.go oidc: handle groups claim as string or array (FlexibleStringSlice) 2026-05-04 15:26:53 +02:00
version.go all: apply formatter changes 2026-04-13 17:23:47 +01:00