Skip to content

Commit 7b4c642

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

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
@@ -1092,3 +1092,69 @@ func TestFlagsToolHandler(t *testing.T) {
10921092
})
10931093
}
10941094
}
1095+
1096+
func TestListAlertsToolHandler(t *testing.T) {
1097+
testCases := []struct {
1098+
name string
1099+
request mcp.CallToolRequest
1100+
mockAlertsFunc func(ctx context.Context) (promv1.AlertsResult, error)
1101+
validateResult func(t *testing.T, result *mcp.CallToolResult, err error)
1102+
}{
1103+
{
1104+
name: "success",
1105+
request: mcp.CallToolRequest{
1106+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
1107+
Params: mcp.CallToolParams{
1108+
Name: "list_alerts",
1109+
},
1110+
},
1111+
mockAlertsFunc: func(ctx context.Context) (promv1.AlertsResult, error) {
1112+
return promv1.AlertsResult{}, nil
1113+
},
1114+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
1115+
require.NoError(t, err)
1116+
require.False(t, result.IsError)
1117+
},
1118+
},
1119+
{
1120+
name: "API error",
1121+
request: mcp.CallToolRequest{
1122+
Request: mcp.Request{Method: string(mcp.MethodToolsCall)},
1123+
Params: mcp.CallToolParams{
1124+
Name: "list_alerts",
1125+
},
1126+
},
1127+
mockAlertsFunc: func(ctx context.Context) (promv1.AlertsResult, error) {
1128+
return promv1.AlertsResult{}, errors.New("prometheus exploded")
1129+
},
1130+
validateResult: func(t *testing.T, result *mcp.CallToolResult, err error) {
1131+
require.NoError(t, err)
1132+
require.True(t, result.IsError)
1133+
require.Contains(t, toolCallResultAsString(result), "prometheus exploded")
1134+
},
1135+
},
1136+
}
1137+
1138+
mockAPI := &MockPrometheusAPI{}
1139+
mockServer := mcptest.NewUnstartedServer(t)
1140+
mockServer.AddTool(listAlertsTool, listAlertsToolHandler)
1141+
1142+
ctx := context.WithValue(context.Background(), apiClientKey{}, mockAPI)
1143+
err := mockServer.Start(ctx)
1144+
require.NoError(t, err)
1145+
defer mockServer.Close()
1146+
1147+
mcpClient := mockServer.Client()
1148+
defer mcpClient.Close()
1149+
1150+
for _, tc := range testCases {
1151+
t.Run(tc.name, func(t *testing.T) {
1152+
mockAPI.AlertsFunc = tc.mockAlertsFunc
1153+
1154+
res, err := mcpClient.CallTool(ctx, tc.request)
1155+
require.NoError(t, err)
1156+
1157+
tc.validateResult(t, res, err)
1158+
})
1159+
}
1160+
}

0 commit comments

Comments
 (0)