summaryrefslogtreecommitdiff
path: root/internal/executor/executor_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/executor/executor_test.go')
-rw-r--r--internal/executor/executor_test.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/executor/executor_test.go b/internal/executor/executor_test.go
index 7e676eb..17982f8 100644
--- a/internal/executor/executor_test.go
+++ b/internal/executor/executor_test.go
@@ -1121,3 +1121,41 @@ func TestPool_LoadBalancing_OverridesAgentType(t *testing.T) {
t.Errorf("expected claude runner to be called once, got %d", runner.callCount())
}
}
+
+// TestPool_SpecificAgent_SkipsLoadBalancing verifies that if a specific
+// registered agent is requested (claude or gemini), it is used directly
+// and load balancing (pickAgent) is skipped.
+func TestPool_SpecificAgent_SkipsLoadBalancing(t *testing.T) {
+ store := testStore(t)
+ claudeRunner := &mockRunner{}
+ geminiRunner := &mockRunner{}
+ runners := map[string]Runner{
+ "claude": claudeRunner,
+ "gemini": geminiRunner,
+ }
+ logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelError}))
+ pool := NewPool(4, runners, store, logger)
+
+ // Inject 2 active tasks for gemini, 0 for claude.
+ // pickAgent would normally pick "claude".
+ pool.mu.Lock()
+ pool.activePerAgent["gemini"] = 2
+ pool.mu.Unlock()
+
+ tk := makeTask("specific-gemini")
+ tk.Agent.Type = "gemini"
+ store.CreateTask(tk)
+
+ if err := pool.Submit(context.Background(), tk); err != nil {
+ t.Fatalf("submit: %v", err)
+ }
+
+ <-pool.Results()
+
+ if geminiRunner.callCount() != 1 {
+ t.Errorf("expected gemini runner to be called once, got %d", geminiRunner.callCount())
+ }
+ if claudeRunner.callCount() != 0 {
+ t.Errorf("expected claude runner to NOT be called, got %d", claudeRunner.callCount())
+ }
+}