| package auth |
|
|
| import ( |
| "context" |
| "net/http" |
| "sync" |
| "testing" |
|
|
| cliproxyexecutor "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/executor" |
| ) |
|
|
| type replaceAwareExecutor struct { |
| id string |
|
|
| mu sync.Mutex |
| closedSessionIDs []string |
| } |
|
|
| func (e *replaceAwareExecutor) Identifier() string { |
| return e.id |
| } |
|
|
| func (e *replaceAwareExecutor) Execute(context.Context, *Auth, cliproxyexecutor.Request, cliproxyexecutor.Options) (cliproxyexecutor.Response, error) { |
| return cliproxyexecutor.Response{}, nil |
| } |
|
|
| func (e *replaceAwareExecutor) ExecuteStream(context.Context, *Auth, cliproxyexecutor.Request, cliproxyexecutor.Options) (*cliproxyexecutor.StreamResult, error) { |
| ch := make(chan cliproxyexecutor.StreamChunk) |
| close(ch) |
| return &cliproxyexecutor.StreamResult{Chunks: ch}, nil |
| } |
|
|
| func (e *replaceAwareExecutor) Refresh(_ context.Context, auth *Auth) (*Auth, error) { |
| return auth, nil |
| } |
|
|
| func (e *replaceAwareExecutor) CountTokens(context.Context, *Auth, cliproxyexecutor.Request, cliproxyexecutor.Options) (cliproxyexecutor.Response, error) { |
| return cliproxyexecutor.Response{}, nil |
| } |
|
|
| func (e *replaceAwareExecutor) HttpRequest(context.Context, *Auth, *http.Request) (*http.Response, error) { |
| return nil, nil |
| } |
|
|
| func (e *replaceAwareExecutor) CloseExecutionSession(sessionID string) { |
| e.mu.Lock() |
| defer e.mu.Unlock() |
| e.closedSessionIDs = append(e.closedSessionIDs, sessionID) |
| } |
|
|
| func (e *replaceAwareExecutor) ClosedSessionIDs() []string { |
| e.mu.Lock() |
| defer e.mu.Unlock() |
| out := make([]string, len(e.closedSessionIDs)) |
| copy(out, e.closedSessionIDs) |
| return out |
| } |
|
|
| func TestManagerRegisterExecutorClosesReplacedExecutionSessions(t *testing.T) { |
| t.Parallel() |
|
|
| manager := NewManager(nil, nil, nil) |
| replaced := &replaceAwareExecutor{id: "codex"} |
| current := &replaceAwareExecutor{id: "codex"} |
|
|
| manager.RegisterExecutor(replaced) |
| manager.RegisterExecutor(current) |
|
|
| closed := replaced.ClosedSessionIDs() |
| if len(closed) != 1 { |
| t.Fatalf("expected replaced executor close calls = 1, got %d", len(closed)) |
| } |
| if closed[0] != CloseAllExecutionSessionsID { |
| t.Fatalf("expected close marker %q, got %q", CloseAllExecutionSessionsID, closed[0]) |
| } |
| if len(current.ClosedSessionIDs()) != 0 { |
| t.Fatalf("expected current executor to stay open") |
| } |
| } |
|
|
| func TestManagerExecutorReturnsRegisteredExecutor(t *testing.T) { |
| t.Parallel() |
|
|
| manager := NewManager(nil, nil, nil) |
| current := &replaceAwareExecutor{id: "codex"} |
| manager.RegisterExecutor(current) |
|
|
| resolved, okResolved := manager.Executor("CODEX") |
| if !okResolved { |
| t.Fatal("expected registered executor to be found") |
| } |
| resolvedExecutor, okResolvedExecutor := resolved.(*replaceAwareExecutor) |
| if !okResolvedExecutor { |
| t.Fatalf("expected resolved executor type %T, got %T", current, resolved) |
| } |
| if resolvedExecutor != current { |
| t.Fatal("expected resolved executor to match registered executor") |
| } |
|
|
| _, okMissing := manager.Executor("unknown") |
| if okMissing { |
| t.Fatal("expected unknown provider lookup to fail") |
| } |
| } |
|
|