44 lines
1.1 KiB
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")
|
|
}
|
|
}
|