ollie/cmd/olliesrv/internal/backend/classify_test.go

44 lines
1.1 KiB
Go

package backend
import (
"errors"
"fmt"
"testing"
)
func TestClassifyError(t *testing.T) {
cases := []struct {
err error
wantSeverity string
wantRemed bool
}{
{nil, "", false},
{&RateLimitError{}, SeverityTransient, true},
{&TransientError{}, SeverityTransient, true},
{&ContextOverflowError{}, SeverityConfig, true},
{&ToolUnsupportedError{}, SeverityConfig, true},
{errors.New("something else"), SeverityFatal, false},
}
for _, c := range cases {
sev, remed := ClassifyError(c.err)
if sev != c.wantSeverity {
t.Errorf("ClassifyError(%v) severity = %q, want %q", c.err, sev, c.wantSeverity)
}
if (remed != "") != c.wantRemed {
t.Errorf("ClassifyError(%v) remediation = %q, wantNonEmpty=%v", c.err, remed, c.wantRemed)
}
}
}
func TestClassifyError_Wrapped(t *testing.T) {
// Classification must see through fmt.Errorf %w wrapping.
err := fmt.Errorf("step 2: %w", &ContextOverflowError{Message: "too long"})
sev, remed := ClassifyError(err)
if sev != SeverityConfig {
t.Errorf("severity = %q, want %q", sev, SeverityConfig)
}
if remed == "" {
t.Error("expected remediation for context overflow")
}
}