mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-24 07:39:07 +02:00
Merge branch 'main' into embedded-vnc
This commit is contained in:
@@ -29,6 +29,8 @@ var allKeys = []string{
|
||||
KeyRosenpassEnabled,
|
||||
KeyRosenpassPermissive,
|
||||
KeyWireguardPort,
|
||||
KeyEnableLocalMetrics,
|
||||
KeyLocalMetricsAddress,
|
||||
KeySplitTunnelMode,
|
||||
KeySplitTunnelApps,
|
||||
KeyLazyConnection,
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
//go:build windows || darwin
|
||||
|
||||
package mdm
|
||||
|
||||
import (
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"slices"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestAllKeysCoversEveryPolicyKey guards against the drift that adding a Key*
|
||||
// constant without listing it in allKeys causes: the desktop loaders resolve
|
||||
// value names through canonicalKey, so an unlisted key is silently discarded as
|
||||
// unknown. policy.go is parsed rather than hand-mirrored so the test cannot go
|
||||
// stale in the same way.
|
||||
func TestAllKeysCoversEveryPolicyKey(t *testing.T) {
|
||||
file, err := parser.ParseFile(token.NewFileSet(), "policy.go", nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("parse policy.go: %v", err)
|
||||
}
|
||||
|
||||
for _, decl := range file.Decls {
|
||||
gen, ok := decl.(*ast.GenDecl)
|
||||
if !ok || gen.Tok != token.CONST {
|
||||
continue
|
||||
}
|
||||
for _, spec := range gen.Specs {
|
||||
value, ok := spec.(*ast.ValueSpec)
|
||||
if !ok || len(value.Names) != 1 || len(value.Values) != 1 {
|
||||
continue
|
||||
}
|
||||
name := value.Names[0].Name
|
||||
if len(name) < 4 || name[:3] != "Key" {
|
||||
continue
|
||||
}
|
||||
lit, ok := value.Values[0].(*ast.BasicLit)
|
||||
if !ok || lit.Kind != token.STRING {
|
||||
continue
|
||||
}
|
||||
key, err := strconv.Unquote(lit.Value)
|
||||
if err != nil {
|
||||
t.Fatalf("unquote %s: %v", name, err)
|
||||
}
|
||||
if !slices.Contains(allKeys, key) {
|
||||
t.Errorf("%s (%q) is missing from allKeys, so the desktop loaders discard it as unknown", name, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,8 @@ const (
|
||||
KeyRosenpassEnabled = "rosenpassEnabled"
|
||||
KeyRosenpassPermissive = "rosenpassPermissive"
|
||||
KeyWireguardPort = "wireguardPort"
|
||||
KeyEnableLocalMetrics = "enableLocalMetrics"
|
||||
KeyLocalMetricsAddress = "localMetricsAddress"
|
||||
|
||||
// Split tunnel is modeled as a single conceptual policy with two
|
||||
// registry/plist values. KeySplitTunnelMode is the discriminator
|
||||
|
||||
Reference in New Issue
Block a user