@@ -960,3 +960,69 @@ func TestConfigToolHandler(t *testing.T) {
960
960
})
961
961
}
962
962
}
963
+
964
+ func TestBuildinfoToolHandler (t * testing.T ) {
965
+ testCases := []struct {
966
+ name string
967
+ request mcp.CallToolRequest
968
+ mockBuildinfoFunc func (ctx context.Context ) (promv1.BuildinfoResult , error )
969
+ validateResult func (t * testing.T , result * mcp.CallToolResult , err error )
970
+ }{
971
+ {
972
+ name : "success" ,
973
+ request : mcp.CallToolRequest {
974
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
975
+ Params : mcp.CallToolParams {
976
+ Name : "build_info" ,
977
+ },
978
+ },
979
+ mockBuildinfoFunc : func (ctx context.Context ) (promv1.BuildinfoResult , error ) {
980
+ return promv1.BuildinfoResult {}, nil
981
+ },
982
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
983
+ require .NoError (t , err )
984
+ require .False (t , result .IsError )
985
+ },
986
+ },
987
+ {
988
+ name : "API error" ,
989
+ request : mcp.CallToolRequest {
990
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
991
+ Params : mcp.CallToolParams {
992
+ Name : "build_info" ,
993
+ },
994
+ },
995
+ mockBuildinfoFunc : func (ctx context.Context ) (promv1.BuildinfoResult , error ) {
996
+ return promv1.BuildinfoResult {}, errors .New ("prometheus exploded" )
997
+ },
998
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
999
+ require .NoError (t , err )
1000
+ require .True (t , result .IsError )
1001
+ require .Contains (t , toolCallResultAsString (result ), "prometheus exploded" )
1002
+ },
1003
+ },
1004
+ }
1005
+
1006
+ mockAPI := & MockPrometheusAPI {}
1007
+ mockServer := mcptest .NewUnstartedServer (t )
1008
+ mockServer .AddTool (buildinfoTool , buildinfoToolHandler )
1009
+
1010
+ ctx := context .WithValue (context .Background (), apiClientKey {}, mockAPI )
1011
+ err := mockServer .Start (ctx )
1012
+ require .NoError (t , err )
1013
+ defer mockServer .Close ()
1014
+
1015
+ mcpClient := mockServer .Client ()
1016
+ defer mcpClient .Close ()
1017
+
1018
+ for _ , tc := range testCases {
1019
+ t .Run (tc .name , func (t * testing.T ) {
1020
+ mockAPI .BuildinfoFunc = tc .mockBuildinfoFunc
1021
+
1022
+ res , err := mcpClient .CallTool (ctx , tc .request )
1023
+ require .NoError (t , err )
1024
+
1025
+ tc .validateResult (t , res , err )
1026
+ })
1027
+ }
1028
+ }
0 commit comments