@@ -894,3 +894,69 @@ func TestRuntimeinfoToolHandler(t *testing.T) {
894
894
})
895
895
}
896
896
}
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