Skip to content

Commit 67d1d9f

Browse files
committed
test: add tests for flag tool handler
Signed-off-by: TJ Hoplock <[email protected]>
1 parent 1bf953e commit 67d1d9f

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
@@ -1026,3 +1026,69 @@ func TestBuildinfoToolHandler(t *testing.T) {
10261026
})
10271027
}
10281028
}
1029+
1030+
func TestFlagsToolHandler(t *testing.T) {
1031+
testCases := []struct {
1032+
name string
1033+
request mcp.CallToolRequest
1034+
mockFlagsFunc func(ctx context.Context) (promv1.FlagsResult, error)
1035+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
1036+
}{
1037+
{
1038+
name: "success",
1039+
request: mcp.CallToolRequest{
1040+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
1041+
Params: mcp.CallToolParams{
1042+
Name: "flags",
1043+
},
1044+
},
1045+
mockFlagsFunc: func(ctx context.Context) (promv1.FlagsResult, error) {
1046+
return promv1.FlagsResult{}, nil
1047+
},
1048+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
1049+
require.NoError(t, err)
1050+
require.False(t, result.IsError)
1051+
},
1052+
},
1053+
{
1054+
name: "API error",
1055+
request: mcp.CallToolRequest{
1056+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
1057+
Params: mcp.CallToolParams{
1058+
Name: "flags",
1059+
},
1060+
},
1061+
mockFlagsFunc: func(ctx context.Context) (promv1.FlagsResult, error) {
1062+
return promv1.FlagsResult{}, errors.New("prometheus exploded")
1063+
},
1064+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
1065+
require.NoError(t, err)
1066+
require.True(t, result.IsError)
1067+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
1068+
},
1069+
},
1070+
}
1071+
1072+
mockAPI := &MockPrometheusAPI{}
1073+
mockServer := mcptest.NewUnstartedServer(t)
1074+
mockServer.AddTool(flagsTool, flagsToolHandler)
1075+
1076+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
1077+
err := mockServer.Start(ctx)
1078+
require.NoError(t, err)
1079+
defer mockServer.Close()
1080+
1081+
mcpClient := mockServer.Client()
1082+
defer mcpClient.Close()
1083+
1084+
for _, tc := range testCases {
1085+
t.Run(tc.name, func(t *testing.T) {
1086+
mockAPI.FlagsFunc = tc.mockFlagsFunc
1087+
1088+
res, err := mcpClient.CallTool(ctx, tc.request)
1089+
require.NoError(t, err)
1090+
1091+
tc.validateResult(t, res, err)
1092+
})
1093+
}
1094+
}

0 commit comments

Comments
 (0)