Skip to content

Commit 1bf953e

Browse files
committed
test: add tests for build info tool handler
Signed-off-by: TJ Hoplock <[email protected]>
1 parent 0048e30 commit 1bf953e

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
@@ -960,3 +960,69 @@ func TestConfigToolHandler(t *testing.T) {
960960
})
961961
}
962962
}
963+
964+
func TestBuildinfoToolHandler(t *testing.T) {
965+
testCases := []struct {
966+
name string
967+
request mcp.CallToolRequest
968+
mockBuildinfoFunc func(ctx context.Context) (promv1.BuildinfoResult, error)
969+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
970+
}{
971+
{
972+
name: "success",
973+
request: mcp.CallToolRequest{
974+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
975+
Params: mcp.CallToolParams{
976+
Name: "build_info",
977+
},
978+
},
979+
mockBuildinfoFunc: func(ctx context.Context) (promv1.BuildinfoResult, error) {
980+
return promv1.BuildinfoResult{}, nil
981+
},
982+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
983+
require.NoError(t, err)
984+
require.False(t, result.IsError)
985+
},
986+
},
987+
{
988+
name: "API error",
989+
request: mcp.CallToolRequest{
990+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
991+
Params: mcp.CallToolParams{
992+
Name: "build_info",
993+
},
994+
},
995+
mockBuildinfoFunc: func(ctx context.Context) (promv1.BuildinfoResult, error) {
996+
return promv1.BuildinfoResult{}, errors.New("prometheus exploded")
997+
},
998+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
999+
require.NoError(t, err)
1000+
require.True(t, result.IsError)
1001+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
1002+
},
1003+
},
1004+
}
1005+
1006+
mockAPI := &MockPrometheusAPI{}
1007+
mockServer := mcptest.NewUnstartedServer(t)
1008+
mockServer.AddTool(buildinfoTool, buildinfoToolHandler)
1009+
1010+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
1011+
err := mockServer.Start(ctx)
1012+
require.NoError(t, err)
1013+
defer mockServer.Close()
1014+
1015+
mcpClient := mockServer.Client()
1016+
defer mcpClient.Close()
1017+
1018+
for _, tc := range testCases {
1019+
t.Run(tc.name, func(t *testing.T) {
1020+
mockAPI.BuildinfoFunc = tc.mockBuildinfoFunc
1021+
1022+
res, err := mcpClient.CallTool(ctx, tc.request)
1023+
require.NoError(t, err)
1024+
1025+
tc.validateResult(t, res, err)
1026+
})
1027+
}
1028+
}

0 commit comments

Comments
 (0)