@@ -828,3 +828,69 @@ func TestListRulesToolHandler(t *testing.T) {
828
828
})
829
829
}
830
830
}
831
+
832
+ func TestRuntimeinfoToolHandler (t * testing.T ) {
833
+ testCases := []struct {
834
+ name string
835
+ request mcp.CallToolRequest
836
+ mockRuntimeinfoFunc func (ctx context.Context ) (promv1.RuntimeinfoResult , error )
837
+ validateResult func (t * testing.T , result * mcp.CallToolResult , err error )
838
+ }{
839
+ {
840
+ name : "success" ,
841
+ request : mcp.CallToolRequest {
842
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
843
+ Params : mcp.CallToolParams {
844
+ Name : "runtime_info" ,
845
+ },
846
+ },
847
+ mockRuntimeinfoFunc : func (ctx context.Context ) (promv1.RuntimeinfoResult , error ) {
848
+ return promv1.RuntimeinfoResult {}, nil
849
+ },
850
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
851
+ require .NoError (t , err )
852
+ require .False (t , result .IsError )
853
+ },
854
+ },
855
+ {
856
+ name : "API error" ,
857
+ request : mcp.CallToolRequest {
858
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
859
+ Params : mcp.CallToolParams {
860
+ Name : "runtime_info" ,
861
+ },
862
+ },
863
+ mockRuntimeinfoFunc : func (ctx context.Context ) (promv1.RuntimeinfoResult , error ) {
864
+ return promv1.RuntimeinfoResult {}, errors .New ("prometheus exploded" )
865
+ },
866
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
867
+ require .NoError (t , err )
868
+ require .True (t , result .IsError )
869
+ require .Contains (t , toolCallResultAsString (result ), "prometheus exploded" )
870
+ },
871
+ },
872
+ }
873
+
874
+ mockAPI := & MockPrometheusAPI {}
875
+ mockServer := mcptest .NewUnstartedServer (t )
876
+ mockServer .AddTool (runtimeinfoTool , runtimeinfoToolHandler )
877
+
878
+ ctx := context .WithValue (context .Background (), apiClientKey {}, mockAPI )
879
+ err := mockServer .Start (ctx )
880
+ require .NoError (t , err )
881
+ defer mockServer .Close ()
882
+
883
+ mcpClient := mockServer .Client ()
884
+ defer mcpClient .Close ()
885
+
886
+ for _ , tc := range testCases {
887
+ t .Run (tc .name , func (t * testing.T ) {
888
+ mockAPI .RuntimeinfoFunc = tc .mockRuntimeinfoFunc
889
+
890
+ res , err := mcpClient .CallTool (ctx , tc .request )
891
+ require .NoError (t , err )
892
+
893
+ tc .validateResult (t , res , err )
894
+ })
895
+ }
896
+ }
0 commit comments