@@ -1092,3 +1092,69 @@ func TestFlagsToolHandler(t *testing.T) {
1092
1092
})
1093
1093
}
1094
1094
}
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