35 lines
1.8 KiB
Go
35 lines
1.8 KiB
Go
package handoff
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestFallbackManager(t *testing.T) {
|
|
m := NewFallbackManager(FallbackConfig{MaxLanguageFailures: 3, MaxRegionFailures: 3, MaxNoAnswer: 2, MaxKBUnavailable: 1, MaxAIErrors: 1, MaxMediaErrors: 1, MaxToolErrors: 2, CallTimeout: time.Minute})
|
|
if d := m.Evaluate(FallbackCounters{LanguageFailures: 3}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonLanguageFailures {
|
|
t.Fatalf("language fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{RegionFailures: 3}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonRegionFailures {
|
|
t.Fatalf("region fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{NoAnswerCount: 2}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonRepeatedNoAnswer {
|
|
t.Fatalf("no answer fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{KBUnavailable: 1}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonKBUnavailable {
|
|
t.Fatalf("kb fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{AIProviderErrors: 1}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonAIProviderError {
|
|
t.Fatalf("ai fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{MediaErrors: 1}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonMediaError {
|
|
t.Fatalf("media fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{ToolErrors: 2}, "ru", time.Now()); !d.ShouldOfferHandoff || d.ReasonCode != HandoffReasonToolError {
|
|
t.Fatalf("tool fallback failed: %+v", d)
|
|
}
|
|
if d := m.Evaluate(FallbackCounters{StartedAt: time.Now().Add(-2 * time.Minute)}, "ru", time.Now()); !d.ShouldClose || d.ReasonCode != HandoffReasonTimeout {
|
|
t.Fatalf("timeout fallback failed: %+v", d)
|
|
}
|
|
}
|