(t *testing.T)
| 495 | } |
| 496 | |
| 497 | func TestModel_LogsSelection(t *testing.T) { |
| 498 | // Not parallel: it swaps the process-global default logger via slog.SetDefault. |
| 499 | var buf concurrent.Buffer |
| 500 | handler := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelInfo}) |
| 501 | prev := slog.Default() |
| 502 | slog.SetDefault(slog.New(handler)) |
| 503 | t.Cleanup(func() { slog.SetDefault(prev) }) |
| 504 | |
| 505 | model1 := &mockProvider{id: modelsdev.NewID("anthropic", "claude-sonnet-4-0")} |
| 506 | model2 := &mockProvider{id: modelsdev.NewID("openai", "gpt-4o")} |
| 507 | |
| 508 | a := New("scanner", "test", WithModel(model1), WithModel(model2)) |
| 509 | |
| 510 | // Verify basic selection logging |
| 511 | selected := a.Model(t.Context()) |
| 512 | logOutput := buf.String() |
| 513 | |
| 514 | assert.Contains(t, logOutput, "Model selected") |
| 515 | assert.Contains(t, logOutput, "agent=scanner") |
| 516 | assert.Contains(t, logOutput, selected.ID().String()) |
| 517 | assert.Contains(t, logOutput, "pool_size=2") |
| 518 | |
| 519 | // Verify override scenario logs correct pool_size |
| 520 | buf.Reset() |
| 521 | override := &mockProvider{id: modelsdev.NewID("google", "gemini-2.0-flash")} |
| 522 | a.SetModelOverride(override) |
| 523 | |
| 524 | selected = a.Model(t.Context()) |
| 525 | logOutput = buf.String() |
| 526 | |
| 527 | assert.Equal(t, "google/gemini-2.0-flash", selected.ID().String()) |
| 528 | assert.Contains(t, logOutput, "google/gemini-2.0-flash") |
| 529 | assert.Contains(t, logOutput, "pool_size=1") |
| 530 | } |
| 531 | |
| 532 | func TestModelOverride_ConcurrentAccess(t *testing.T) { |
| 533 | t.Parallel() |
nothing calls this directly
no test coverage detected