cmd/vet: add subtestnames analyzer; fix all existing violations
Add a new vet analyzer that checks t.Run subtest names don't contain characters requiring quoting when re-running via "go test -run". This enforces the style guide rule: don't use spaces or punctuation in subtest names. The analyzer flags: - Direct t.Run calls with string literal names containing spaces, regex metacharacters, quotes, or other problematic characters - Table-driven t.Run(tt.name, ...) calls where tt ranges over a slice/map literal with bad name field values Also fix all 978 existing violations across 81 test files, replacing spaces with hyphens and shortening long sentence-like names to concise hyphenated forms. Updates #19242 Change-Id: Ib0ad96a111bd8e764582d1d4902fe2599454ab65 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
0f02c20c5e
commit
5ef3713c9f
@@ -31,7 +31,7 @@ func TestResolveAuthKey(t *testing.T) {
|
||||
wantErr: "",
|
||||
},
|
||||
{
|
||||
name: "missing client id short-circuits without error",
|
||||
name: "missing-client-id-noop",
|
||||
clientID: "",
|
||||
idToken: "token",
|
||||
audience: "api://tailscale-wif",
|
||||
@@ -40,7 +40,7 @@ func TestResolveAuthKey(t *testing.T) {
|
||||
wantErr: "",
|
||||
},
|
||||
{
|
||||
name: "missing id token and audience",
|
||||
name: "missing-id-token-and-audience",
|
||||
clientID: "client-123",
|
||||
idToken: "",
|
||||
audience: "",
|
||||
@@ -48,7 +48,7 @@ func TestResolveAuthKey(t *testing.T) {
|
||||
wantErr: "federated identity requires either an ID token or an audience",
|
||||
},
|
||||
{
|
||||
name: "missing tags",
|
||||
name: "missing-tags",
|
||||
clientID: "client-123",
|
||||
idToken: "token",
|
||||
audience: "api://tailscale-wif",
|
||||
@@ -56,7 +56,7 @@ func TestResolveAuthKey(t *testing.T) {
|
||||
wantErr: "federated identity authkeys require --advertise-tags",
|
||||
},
|
||||
{
|
||||
name: "invalid client id attributes",
|
||||
name: "invalid-client-id-attrs",
|
||||
clientID: "client-123?invalid=value",
|
||||
idToken: "token",
|
||||
audience: "api://tailscale-wif",
|
||||
@@ -99,7 +99,7 @@ func TestParseOptionalAttributes(t *testing.T) {
|
||||
wantErr string
|
||||
}{
|
||||
{
|
||||
name: "default values",
|
||||
name: "default-values",
|
||||
clientID: "client-123",
|
||||
wantClientID: "client-123",
|
||||
wantEphemeral: true,
|
||||
@@ -107,7 +107,7 @@ func TestParseOptionalAttributes(t *testing.T) {
|
||||
wantErr: "",
|
||||
},
|
||||
{
|
||||
name: "custom values",
|
||||
name: "custom-values",
|
||||
clientID: "client-123?ephemeral=false&preauthorized=true",
|
||||
wantClientID: "client-123",
|
||||
wantEphemeral: false,
|
||||
@@ -115,7 +115,7 @@ func TestParseOptionalAttributes(t *testing.T) {
|
||||
wantErr: "",
|
||||
},
|
||||
{
|
||||
name: "unknown attribute",
|
||||
name: "unknown-attribute",
|
||||
clientID: "client-123?unknown=value",
|
||||
wantClientID: "",
|
||||
wantEphemeral: false,
|
||||
@@ -123,7 +123,7 @@ func TestParseOptionalAttributes(t *testing.T) {
|
||||
wantErr: `unknown optional config attribute "unknown"`,
|
||||
},
|
||||
{
|
||||
name: "invalid value",
|
||||
name: "invalid-value",
|
||||
clientID: "client-123?ephemeral=invalid",
|
||||
wantClientID: "",
|
||||
wantEphemeral: false,
|
||||
|
||||
@@ -20,42 +20,42 @@ func TestResolveAuthKey(t *testing.T) {
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "keys without client secret prefix pass through unchanged",
|
||||
name: "non-client-secret-passthrough",
|
||||
clientID: "tskey-auth-regular",
|
||||
tags: []string{"tag:test"},
|
||||
wantAuthKey: "tskey-auth-regular",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "client secret without advertised tags",
|
||||
name: "client-secret-no-tags",
|
||||
clientID: "tskey-client-abc",
|
||||
tags: nil,
|
||||
wantAuthKey: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "client secret with default attributes",
|
||||
name: "client-secret-default-attrs",
|
||||
clientID: "tskey-client-abc",
|
||||
tags: []string{"tag:test"},
|
||||
wantAuthKey: "tskey-auth-xyz",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "client secret with custom attributes",
|
||||
name: "client-secret-custom-attrs",
|
||||
clientID: "tskey-client-abc?ephemeral=false&preauthorized=true",
|
||||
tags: []string{"tag:test"},
|
||||
wantAuthKey: "tskey-auth-xyz",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "client secret with unknown attribute",
|
||||
name: "client-secret-unknown-attr",
|
||||
clientID: "tskey-client-abc?unknown=value",
|
||||
tags: []string{"tag:test"},
|
||||
wantAuthKey: "",
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "oauth client secret with invalid attribute value",
|
||||
name: "client-secret-invalid-attr-value",
|
||||
clientID: "tskey-client-abc?ephemeral=invalid",
|
||||
tags: []string{"tag:test"},
|
||||
wantAuthKey: "",
|
||||
@@ -111,7 +111,7 @@ func TestResolveAuthKeyAttributes(t *testing.T) {
|
||||
wantBaseURL string
|
||||
}{
|
||||
{
|
||||
name: "default values",
|
||||
name: "default-values",
|
||||
clientSecret: "tskey-client-abc",
|
||||
wantEphemeral: true,
|
||||
wantPreauth: false,
|
||||
@@ -132,14 +132,14 @@ func TestResolveAuthKeyAttributes(t *testing.T) {
|
||||
wantBaseURL: "https://api.tailscale.com",
|
||||
},
|
||||
{
|
||||
name: "baseURL=https://api.example.com",
|
||||
name: "baseURL-custom",
|
||||
clientSecret: "tskey-client-abc?baseURL=https://api.example.com",
|
||||
wantEphemeral: true,
|
||||
wantPreauth: false,
|
||||
wantBaseURL: "https://api.example.com",
|
||||
},
|
||||
{
|
||||
name: "all custom values",
|
||||
name: "all-custom-values",
|
||||
clientSecret: "tskey-client-abc?ephemeral=false&preauthorized=true&baseURL=https://api.example.com",
|
||||
wantEphemeral: false,
|
||||
wantPreauth: true,
|
||||
|
||||
@@ -48,7 +48,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantEndpoints []netip.AddrPort
|
||||
}{
|
||||
{
|
||||
name: "no changes non-nil port previously running",
|
||||
name: "no-changes-non-nil-port-running",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -62,7 +62,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "set addr ports unchanged port previously running",
|
||||
name: "set-addr-ports-unchanged-running",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -77,7 +77,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantEndpoints: prefsWithPortOneRelayEndpoints.RelayServerStaticEndpoints,
|
||||
},
|
||||
{
|
||||
name: "set addr ports not previously running",
|
||||
name: "set-addr-ports-not-running",
|
||||
fields: fields{
|
||||
port: nil,
|
||||
rs: nil,
|
||||
@@ -92,7 +92,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantEndpoints: prefsWithPortOneRelayEndpoints.RelayServerStaticEndpoints,
|
||||
},
|
||||
{
|
||||
name: "clear addr ports unchanged port previously running",
|
||||
name: "clear-addr-ports-unchanged-running",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
staticEndpoints: views.SliceOf(prefsWithPortOneRelayEndpoints.RelayServerStaticEndpoints),
|
||||
@@ -108,7 +108,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantEndpoints: nil,
|
||||
},
|
||||
{
|
||||
name: "prefs port nil",
|
||||
name: "prefs-port-nil",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
},
|
||||
@@ -121,7 +121,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "prefs port nil previously running",
|
||||
name: "prefs-port-nil-running",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -135,7 +135,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "prefs port changed",
|
||||
name: "prefs-port-changed",
|
||||
fields: fields{
|
||||
port: new(uint16(2)),
|
||||
},
|
||||
@@ -148,7 +148,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "prefs port changed previously running",
|
||||
name: "prefs-port-changed-running",
|
||||
fields: fields{
|
||||
port: new(uint16(2)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -162,7 +162,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "sameNode false",
|
||||
name: "sameNode-false",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
},
|
||||
@@ -175,7 +175,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "sameNode false previously running",
|
||||
name: "sameNode-false-running",
|
||||
fields: fields{
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -189,7 +189,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "prefs port non-nil extension port nil",
|
||||
name: "prefs-port-non-nil-ext-nil",
|
||||
fields: fields{
|
||||
port: nil,
|
||||
},
|
||||
@@ -277,7 +277,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated bool
|
||||
}{
|
||||
{
|
||||
name: "want running",
|
||||
name: "want-running",
|
||||
shutdown: false,
|
||||
port: new(uint16(1)),
|
||||
hasNodeAttrDisableRelayServer: false,
|
||||
@@ -285,7 +285,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "want running previously running",
|
||||
name: "want-running-previously-running",
|
||||
shutdown: false,
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -294,7 +294,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "shutdown true",
|
||||
name: "shutdown-true",
|
||||
shutdown: true,
|
||||
port: new(uint16(1)),
|
||||
hasNodeAttrDisableRelayServer: false,
|
||||
@@ -302,7 +302,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "shutdown true previously running",
|
||||
name: "shutdown-true-previously-running",
|
||||
shutdown: true,
|
||||
port: new(uint16(1)),
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -311,7 +311,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "port nil",
|
||||
name: "port-nil",
|
||||
shutdown: false,
|
||||
port: nil,
|
||||
hasNodeAttrDisableRelayServer: false,
|
||||
@@ -319,7 +319,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "port nil previously running",
|
||||
name: "port-nil-previously-running",
|
||||
shutdown: false,
|
||||
port: nil,
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
@@ -328,7 +328,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: true,
|
||||
},
|
||||
{
|
||||
name: "hasNodeAttrDisableRelayServer true",
|
||||
name: "hasNodeAttrDisableRelayServer-true",
|
||||
shutdown: false,
|
||||
port: nil,
|
||||
hasNodeAttrDisableRelayServer: true,
|
||||
@@ -336,7 +336,7 @@ func Test_extension_handleRelayServerLifetimeLocked(t *testing.T) {
|
||||
wantRelayServerFieldMutated: false,
|
||||
},
|
||||
{
|
||||
name: "hasNodeAttrDisableRelayServer true previously running",
|
||||
name: "hasNodeAttrDisableRelayServer-true-running",
|
||||
shutdown: false,
|
||||
port: nil,
|
||||
rs: mockRelayServerNotZeroVal(),
|
||||
|
||||
Reference in New Issue
Block a user