Skip to content

Commit 0048e30

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

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
@@ -894,3 +894,69 @@ func TestRuntimeinfoToolHandler(t *testing.T) {
894894
})
895895
}
896896
}
897+
898+
func TestConfigToolHandler(t *testing.T) {
899+
testCases := []struct {
900+
name string
901+
request mcp.CallToolRequest
902+
mockConfigFunc func(ctx context.Context) (promv1.ConfigResult, error)
903+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
904+
}{
905+
{
906+
name: "success",
907+
request: mcp.CallToolRequest{
908+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
909+
Params: mcp.CallToolParams{
910+
Name: "config",
911+
},
912+
},
913+
mockConfigFunc: func(ctx context.Context) (promv1.ConfigResult, error) {
914+
return promv1.ConfigResult{}, nil
915+
},
916+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
917+
require.NoError(t, err)
918+
require.False(t, result.IsError)
919+
},
920+
},
921+
{
922+
name: "API error",
923+
request: mcp.CallToolRequest{
924+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
925+
Params: mcp.CallToolParams{
926+
Name: "config",
927+
},
928+
},
929+
mockConfigFunc: func(ctx context.Context) (promv1.ConfigResult, error) {
930+
return promv1.ConfigResult{}, errors.New("prometheus exploded")
931+
},
932+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
933+
require.NoError(t, err)
934+
require.True(t, result.IsError)
935+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
936+
},
937+
},
938+
}
939+
940+
mockAPI := &MockPrometheusAPI{}
941+
mockServer := mcptest.NewUnstartedServer(t)
942+
mockServer.AddTool(configTool, configToolHandler)
943+
944+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
945+
err := mockServer.Start(ctx)
946+
require.NoError(t, err)
947+
defer mockServer.Close()
948+
949+
mcpClient := mockServer.Client()
950+
defer mcpClient.Close()
951+
952+
for _, tc := range testCases {
953+
t.Run(tc.name, func(t *testing.T) {
954+
mockAPI.ConfigFunc = tc.mockConfigFunc
955+
956+
res, err := mcpClient.CallTool(ctx, tc.request)
957+
require.NoError(t, err)
958+
959+
tc.validateResult(t, res, err)
960+
})
961+
}
962+
}

0 commit comments

Comments
 (0)