Skip to content

Commit 8abbc4b

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

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
@@ -762,3 +762,69 @@ func TestListTargetsToolHandler(t *testing.T) {
762762
})
763763
}
764764
}
765+
766+
func TestListRulesToolHandler(t *testing.T) {
767+
testCases := []struct {
768+
name string
769+
request mcp.CallToolRequest
770+
mockRulesFunc func(ctx context.Context) (promv1.RulesResult, error)
771+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
772+
}{
773+
{
774+
name: "success",
775+
request: mcp.CallToolRequest{
776+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
777+
Params: mcp.CallToolParams{
778+
Name: "list_rules",
779+
},
780+
},
781+
mockRulesFunc: func(ctx context.Context) (promv1.RulesResult, error) {
782+
return promv1.RulesResult{}, nil
783+
},
784+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
785+
require.NoError(t, err)
786+
require.False(t, result.IsError)
787+
},
788+
},
789+
{
790+
name: "API error",
791+
request: mcp.CallToolRequest{
792+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
793+
Params: mcp.CallToolParams{
794+
Name: "list_rules",
795+
},
796+
},
797+
mockRulesFunc: func(ctx context.Context) (promv1.RulesResult, error) {
798+
return promv1.RulesResult{}, errors.New("prometheus exploded")
799+
},
800+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
801+
require.NoError(t, err)
802+
require.True(t, result.IsError)
803+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
804+
},
805+
},
806+
}
807+
808+
mockAPI := &MockPrometheusAPI{}
809+
mockServer := mcptest.NewUnstartedServer(t)
810+
mockServer.AddTool(rulesTool, rulesToolHandler)
811+
812+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
813+
err := mockServer.Start(ctx)
814+
require.NoError(t, err)
815+
defer mockServer.Close()
816+
817+
mcpClient := mockServer.Client()
818+
defer mcpClient.Close()
819+
820+
for _, tc := range testCases {
821+
t.Run(tc.name, func(t *testing.T) {
822+
mockAPI.RulesFunc = tc.mockRulesFunc
823+
824+
res, err := mcpClient.CallTool(ctx, tc.request)
825+
require.NoError(t, err)
826+
827+
tc.validateResult(t, res, err)
828+
})
829+
}
830+
}

0 commit comments

Comments
 (0)