67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package agentruntime
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestFailureCodecRoundTrip(t *testing.T) {
|
|
input := &Failure{
|
|
Code: FailureCodeQuotaExhausted,
|
|
Message: "weekly quota exhausted",
|
|
Retryable: true,
|
|
Metadata: map[string]string{"target": "codex"},
|
|
}
|
|
|
|
payload, err := EncodeFailure(input)
|
|
if err != nil {
|
|
t.Fatalf("EncodeFailure() error = %v", err)
|
|
}
|
|
output, err := DecodeFailure(payload)
|
|
if err != nil {
|
|
t.Fatalf("DecodeFailure() error = %v", err)
|
|
}
|
|
if output.Code != input.Code || output.Message != input.Message || output.Retryable != input.Retryable {
|
|
t.Fatalf("round trip = %#v, want %#v", output, input)
|
|
}
|
|
if output.Metadata["target"] != "codex" {
|
|
t.Fatalf("metadata = %#v", output.Metadata)
|
|
}
|
|
}
|
|
|
|
func TestFailureCodecNormalizesUnknownCode(t *testing.T) {
|
|
output, err := DecodeFailure(`{"schema_version":1,"failure":{"code":"future_code","message":"future"}}`)
|
|
if err != nil {
|
|
t.Fatalf("DecodeFailure() error = %v", err)
|
|
}
|
|
if output.Code != FailureCodeUnknown {
|
|
t.Fatalf("Code = %q, want %q", output.Code, FailureCodeUnknown)
|
|
}
|
|
if output.Metadata["original_code"] != "future_code" {
|
|
t.Fatalf("metadata = %#v", output.Metadata)
|
|
}
|
|
}
|
|
|
|
func TestFailureFromErrorCancellationBoundary(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
err error
|
|
code FailureCode
|
|
retryable bool
|
|
}{
|
|
{name: "runtime cancellation", err: ErrRunCancelled, code: FailureCodeCancelled},
|
|
{name: "context cancellation", err: context.Canceled, code: FailureCodeCancelled},
|
|
{name: "deadline", err: context.DeadlineExceeded, code: FailureCodeDeadlineExceeded, retryable: true},
|
|
{name: "unknown", err: errors.New("provider failed"), code: FailureCodeUnknown},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
failure := FailureFromError(test.err)
|
|
if failure.Code != test.code || failure.Retryable != test.retryable {
|
|
t.Fatalf("FailureFromError() = %#v", failure)
|
|
}
|
|
})
|
|
}
|
|
}
|