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.
This commit is contained in:
parent
3f73ed5404
commit
078b9e308f
72 changed files with 463447 additions and 183 deletions
|
|
@ -302,7 +302,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -345,7 +345,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -1477,7 +1477,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -1520,7 +1520,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -2672,7 +2672,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -2715,7 +2715,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -3850,7 +3850,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -3893,7 +3893,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -5028,7 +5028,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -6200,7 +6200,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -6243,7 +6243,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -7348,7 +7348,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -7391,7 +7391,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -8526,7 +8526,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -8569,7 +8569,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -9725,7 +9725,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -9747,7 +9747,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -10897,7 +10897,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -10940,7 +10940,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -12093,7 +12093,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
@ -13223,7 +13223,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit", "tag:router"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "wartortle",
|
||||
"ComputedNameWithHost": "wartortle"
|
||||
}, {
|
||||
|
|
@ -13266,7 +13266,7 @@
|
|||
"Cap": 131,
|
||||
"Tags": ["tag:exit"],
|
||||
"Online": true,
|
||||
"CapMap": {"suggest-charmander": null},
|
||||
"CapMap": {"suggest-exit-node": null},
|
||||
"ComputedName": "charmander",
|
||||
"ComputedNameWithHost": "charmander"
|
||||
}, {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue