Skip to content

Commit 740177a

Browse files
committed
test: add tests for list targets tool handler
Signed-off-by: TJ Hoplock <[email protected]>
1 parent 1b92d0c commit 740177a

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

pkg/mcp/tools_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,3 +696,69 @@ func TestTargetsMetadataToolHandler(t *testing.T) {
696696
})
697697
}
698698
}
699+
700+
func TestListTargetsToolHandler(t *testing.T) {
701+
testCases := []struct {
702+
name string
703+
request mcp.CallToolRequest
704+
mockTargetsFunc func(ctx context.Context) (promv1.TargetsResult, error)
705+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
706+
}{
707+
{
708+
name: "success",
709+
request: mcp.CallToolRequest{
710+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
711+
Params: mcp.CallToolParams{
712+
Name: "list_targets",
713+
},
714+
},
715+
mockTargetsFunc: func(ctx context.Context) (promv1.TargetsResult, error) {
716+
return promv1.TargetsResult{}, nil
717+
},
718+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
719+
require.NoError(t, err)
720+
require.False(t, result.IsError)
721+
},
722+
},
723+
{
724+
name: "API error",
725+
request: mcp.CallToolRequest{
726+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
727+
Params: mcp.CallToolParams{
728+
Name: "list_targets",
729+
},
730+
},
731+
mockTargetsFunc: func(ctx context.Context) (promv1.TargetsResult, error) {
732+
return promv1.TargetsResult{}, errors.New("prometheus exploded")
733+
},
734+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
735+
require.NoError(t, err)
736+
require.True(t, result.IsError)
737+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
738+
},
739+
},
740+
}
741+
742+
mockAPI := &MockPrometheusAPI{}
743+
mockServer := mcptest.NewUnstartedServer(t)
744+
mockServer.AddTool(targetsTool, targetsToolHandler)
745+
746+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
747+
err := mockServer.Start(ctx)
748+
require.NoError(t, err)
749+
defer mockServer.Close()
750+
751+
mcpClient := mockServer.Client()
752+
defer mcpClient.Close()
753+
754+
for _, tc := range testCases {
755+
t.Run(tc.name, func(t *testing.T) {
756+
mockAPI.TargetsFunc = tc.mockTargetsFunc
757+
758+
res, err := mcpClient.CallTool(ctx, tc.request)
759+
require.NoError(t, err)
760+
761+
tc.validateResult(t, res, err)
762+
})
763+
}
764+
}

0 commit comments

Comments
 (0)