Files

56 lines
1.5 KiB
Go

package router
import (
"testing"
"git.ilapage.cn/OPC/chorus/internal/core/provider"
)
func TestRetryableRedLines(t *testing.T) {
tests := []struct {
name string
class provider.FailureClass
want bool
}{
{"429", provider.FailureRateLimited, true},
{"5xx", provider.FailureServer, true},
{"timeout", provider.FailureTimeout, true},
{"connection", provider.FailureConnection, true},
{"400", provider.FailureBadRequest, false},
{"401", provider.FailureUnauthorized, false},
{"policy rejection", provider.FailurePolicyRejected, false},
{"unknown", provider.FailureOther, false},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := Retryable(test.class); got != test.want {
t.Fatalf("Retryable(%s) = %v, want %v", test.class, got, test.want)
}
})
}
}
func TestClassifyHTTPStatus(t *testing.T) {
tests := []struct {
status int
class provider.FailureClass
want bool
}{
{429, provider.FailureRateLimited, true},
{500, provider.FailureServer, true},
{503, provider.FailureServer, true},
{400, provider.FailureBadRequest, false},
{401, provider.FailureUnauthorized, false},
{403, provider.FailureOther, false},
}
for _, test := range tests {
class := ClassifyHTTPStatus(test.status)
if class != test.class {
t.Errorf("ClassifyHTTPStatus(%d) = %s, want %s", test.status, class, test.class)
}
if got := Retryable(class); got != test.want {
t.Errorf("Retryable(ClassifyHTTPStatus(%d)) = %v, want %v", test.status, got, test.want)
}
}
}