Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
216 changes: 3 additions & 213 deletions internal/config/validation_otel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,75 +264,7 @@ func TestValidateOpenTelemetryConfig(t *testing.T) {
}
}

// TestValidateTrustedBots tests the trustedBots list validation (spec §4.1.3.4).
func TestValidateTrustedBots(t *testing.T) {
tests := []struct {
name string
bots []string
wantErr bool
errContains string
}{
{
name: "nil bots is valid",
bots: nil,
wantErr: false,
},
{
name: "empty slice is rejected",
bots: []string{},
wantErr: true,
errContains: "non-empty",
},
{
name: "single valid bot name",
bots: []string{"github-actions[bot]"},
wantErr: false,
},
{
name: "multiple valid bot names",
bots: []string{"dependabot[bot]", "github-actions[bot]", "renovate[bot]"},
wantErr: false,
},
{
name: "empty string bot is rejected",
bots: []string{"valid-bot", ""},
wantErr: true,
errContains: "non-empty string",
},
{
name: "whitespace-only bot is rejected",
bots: []string{" "},
wantErr: true,
errContains: "non-empty string",
},
{
name: "empty string at index 0 is rejected",
bots: []string{""},
wantErr: true,
errContains: "trusted_bots[0]",
},
{
name: "empty string at index 1 is rejected with index in message",
bots: []string{"valid-bot", ""},
wantErr: true,
errContains: "trusted_bots[1]",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateTrustedBots(tt.bots)
if tt.wantErr {
require.Error(t, err)
if tt.errContains != "" {
assert.ErrorContains(t, err, tt.errContains)
}
} else {
assert.NoError(t, err)
}
})
}
}
// TestValidateTrustedBots is in validation_gateway_coverage_test.go.

// TestValidateCustomSchemas tests custom schema type name and URL validation.
func TestValidateCustomSchemas(t *testing.T) {
Expand Down Expand Up @@ -539,147 +471,5 @@ func TestValidateGuardPolicies(t *testing.T) {
}
}

// TestValidateGatewayConfig_OpenTelemetry adds OTel-specific cases to validateGatewayConfig
// coverage that are not exercised by the main TestValidateGatewayConfig table.
func TestValidateGatewayConfig_OpenTelemetry(t *testing.T) {
validTraceID := "4bf92f3577b34da6a3ce929d0e0e4736"
validSpanID := "00f067aa0ba902b7"

tests := []struct {
name string
gateway *StdinGatewayConfig
wantErr bool
errContains string
}{
{
name: "valid opentelemetry section passes",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{
Endpoint: "https://otel.example.com",
},
},
wantErr: false,
},
{
name: "opentelemetry with traceId and spanId passes",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{
Endpoint: "https://otel.example.com",
TraceID: validTraceID,
SpanID: validSpanID,
},
},
wantErr: false,
},
{
name: "opentelemetry missing endpoint fails",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{},
},
wantErr: true,
errContains: "endpoint",
},
{
name: "opentelemetry with http endpoint fails",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{
Endpoint: "http://otel.example.com",
},
},
wantErr: true,
errContains: "HTTPS",
},
{
name: "opentelemetry with invalid traceId fails",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{
Endpoint: "https://otel.example.com",
TraceID: "invalid",
},
},
wantErr: true,
errContains: "traceId",
},
{
name: "opentelemetry with all-zero traceId fails",
gateway: &StdinGatewayConfig{
OpenTelemetry: &StdinOpenTelemetryConfig{
Endpoint: "https://otel.example.com",
TraceID: "00000000000000000000000000000000",
},
},
wantErr: true,
errContains: "traceId",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateGatewayConfig(tt.gateway)
if tt.wantErr {
require.Error(t, err)
if tt.errContains != "" {
assert.ErrorContains(t, err, tt.errContains)
}
} else {
assert.NoError(t, err)
}
})
}
}

// TestValidateGatewayConfig_TrustedBots adds trustedBots-specific cases to validateGatewayConfig
// coverage that are not exercised by the main TestValidateGatewayConfig table.
func TestValidateGatewayConfig_TrustedBots(t *testing.T) {
tests := []struct {
name string
gateway *StdinGatewayConfig
wantErr bool
errContains string
}{
{
name: "valid trustedBots list passes",
gateway: &StdinGatewayConfig{
TrustedBots: []string{"github-actions[bot]", "dependabot[bot]"},
},
wantErr: false,
},
{
name: "empty trustedBots list is rejected",
gateway: &StdinGatewayConfig{
TrustedBots: []string{},
},
wantErr: true,
errContains: "non-empty",
},
{
name: "trustedBots with empty string entry is rejected",
gateway: &StdinGatewayConfig{
TrustedBots: []string{"valid-bot", ""},
},
wantErr: true,
errContains: "non-empty string",
},
{
name: "nil trustedBots (not set) is valid",
gateway: &StdinGatewayConfig{
TrustedBots: nil,
},
wantErr: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateGatewayConfig(tt.gateway)
if tt.wantErr {
require.Error(t, err)
if tt.errContains != "" {
assert.ErrorContains(t, err, tt.errContains)
}
} else {
assert.NoError(t, err)
}
})
}
}
// TestValidateGatewayConfig_OpenTelemetry is in validation_gateway_coverage_test.go.
// TestValidateGatewayConfig_TrustedBots is in validation_gateway_coverage_test.go.
Loading