(t *testing.T)
| 865 | } |
| 866 | |
| 867 | func TestGetTools_WarningHandling(t *testing.T) { |
| 868 | t.Parallel() |
| 869 | |
| 870 | tests := []struct { |
| 871 | name string |
| 872 | toolsets []tools.ToolSet |
| 873 | wantToolCount int |
| 874 | wantWarning bool |
| 875 | }{ |
| 876 | { |
| 877 | name: "partial success warns once", |
| 878 | toolsets: []tools.ToolSet{newStubToolSet(nil, []tools.Tool{{Name: "good", Parameters: map[string]any{}}}, nil), newStubToolSet(errors.New("boom"), nil, nil)}, |
| 879 | wantToolCount: 1, |
| 880 | wantWarning: true, |
| 881 | }, |
| 882 | { |
| 883 | name: "all fail on start warns once", |
| 884 | toolsets: []tools.ToolSet{newStubToolSet(errors.New("s1"), nil, nil), newStubToolSet(errors.New("s2"), nil, nil)}, |
| 885 | wantToolCount: 0, |
| 886 | wantWarning: true, |
| 887 | }, |
| 888 | { |
| 889 | name: "list failure warns once", |
| 890 | toolsets: []tools.ToolSet{newStubToolSet(nil, nil, errors.New("boom"))}, |
| 891 | wantToolCount: 0, |
| 892 | wantWarning: true, |
| 893 | }, |
| 894 | { |
| 895 | name: "no toolsets no warning", |
| 896 | toolsets: nil, |
| 897 | wantToolCount: 0, |
| 898 | wantWarning: false, |
| 899 | }, |
| 900 | } |
| 901 | |
| 902 | for _, tt := range tests { |
| 903 | t.Run(tt.name, func(t *testing.T) { |
| 904 | root := agent.New("root", "test", agent.WithToolSets(tt.toolsets...), agent.WithModel(&mockProvider{})) |
| 905 | tm := team.New(team.WithAgents(root)) |
| 906 | rt, err := NewLocalRuntime(t.Context(), tm, WithModelStore(mockModelStore{})) |
| 907 | require.NoError(t, err) |
| 908 | |
| 909 | events := make(chan Event, 10) |
| 910 | sessionSpan := trace.SpanFromContext(t.Context()) |
| 911 | |
| 912 | // First call |
| 913 | tools1, err := rt.getTools(t.Context(), root, sessionSpan, NewChannelSink(events), true) |
| 914 | require.NoError(t, err) |
| 915 | require.Len(t, tools1, tt.wantToolCount) |
| 916 | |
| 917 | rt.emitAgentWarnings(root, NewChannelSink(events)) |
| 918 | evs := collectEvents(events) |
| 919 | require.Equal(t, tt.wantWarning, hasWarningEvent(evs), "warning event mismatch on first call") |
| 920 | }) |
| 921 | } |
| 922 | } |
| 923 | |
| 924 | func TestNewRuntime_NoAgentsError(t *testing.T) { |
nothing calls this directly
no test coverage detected