Skip to content

Commit 625df4f

Browse files
committed
test: add tests for runtime info tool handler
Signed-off-by: TJ Hoplock <[email protected]>
1 parent 8abbc4b commit 625df4f

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
@@ -828,3 +828,69 @@ func TestListRulesToolHandler(t *testing.T) {
828828
})
829829
}
830830
}
831+
832+
func TestRuntimeinfoToolHandler(t *testing.T) {
833+
testCases := []struct {
834+
name string
835+
request mcp.CallToolRequest
836+
mockRuntimeinfoFunc func(ctx context.Context) (promv1.RuntimeinfoResult, error)
837+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
838+
}{
839+
{
840+
name: "success",
841+
request: mcp.CallToolRequest{
842+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
843+
Params: mcp.CallToolParams{
844+
Name: "runtime_info",
845+
},
846+
},
847+
mockRuntimeinfoFunc: func(ctx context.Context) (promv1.RuntimeinfoResult, error) {
848+
return promv1.RuntimeinfoResult{}, nil
849+
},
850+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
851+
require.NoError(t, err)
852+
require.False(t, result.IsError)
853+
},
854+
},
855+
{
856+
name: "API error",
857+
request: mcp.CallToolRequest{
858+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
859+
Params: mcp.CallToolParams{
860+
Name: "runtime_info",
861+
},
862+
},
863+
mockRuntimeinfoFunc: func(ctx context.Context) (promv1.RuntimeinfoResult, error) {
864+
return promv1.RuntimeinfoResult{}, errors.New("prometheus exploded")
865+
},
866+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
867+
require.NoError(t, err)
868+
require.True(t, result.IsError)
869+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
870+
},
871+
},
872+
}
873+
874+
mockAPI := &MockPrometheusAPI{}
875+
mockServer := mcptest.NewUnstartedServer(t)
876+
mockServer.AddTool(runtimeinfoTool, runtimeinfoToolHandler)
877+
878+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
879+
err := mockServer.Start(ctx)
880+
require.NoError(t, err)
881+
defer mockServer.Close()
882+
883+
mcpClient := mockServer.Client()
884+
defer mcpClient.Close()
885+
886+
for _, tc := range testCases {
887+
t.Run(tc.name, func(t *testing.T) {
888+
mockAPI.RuntimeinfoFunc = tc.mockRuntimeinfoFunc
889+
890+
res, err := mcpClient.CallTool(ctx, tc.request)
891+
require.NoError(t, err)
892+
893+
tc.validateResult(t, res, err)
894+
})
895+
}
896+
}

0 commit comments

Comments
 (0)