@@ -1026,3 +1026,69 @@ func TestBuildinfoToolHandler(t *testing.T) {
1026
1026
})
1027
1027
}
1028
1028
}
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