@@ -762,3 +762,69 @@ func TestListTargetsToolHandler(t *testing.T) {
762
762
})
763
763
}
764
764
}
765
+
766
+ func TestListRulesToolHandler (t * testing.T ) {
767
+ testCases := []struct {
768
+ name string
769
+ request mcp.CallToolRequest
770
+ mockRulesFunc func (ctx context.Context ) (promv1.RulesResult , error )
771
+ validateResult func (t * testing.T , result * mcp.CallToolResult , err error )
772
+ }{
773
+ {
774
+ name : "success" ,
775
+ request : mcp.CallToolRequest {
776
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
777
+ Params : mcp.CallToolParams {
778
+ Name : "list_rules" ,
779
+ },
780
+ },
781
+ mockRulesFunc : func (ctx context.Context ) (promv1.RulesResult , error ) {
782
+ return promv1.RulesResult {}, nil
783
+ },
784
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
785
+ require .NoError (t , err )
786
+ require .False (t , result .IsError )
787
+ },
788
+ },
789
+ {
790
+ name : "API error" ,
791
+ request : mcp.CallToolRequest {
792
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
793
+ Params : mcp.CallToolParams {
794
+ Name : "list_rules" ,
795
+ },
796
+ },
797
+ mockRulesFunc : func (ctx context.Context ) (promv1.RulesResult , error ) {
798
+ return promv1.RulesResult {}, errors .New ("prometheus exploded" )
799
+ },
800
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
801
+ require .NoError (t , err )
802
+ require .True (t , result .IsError )
803
+ require .Contains (t , toolCallResultAsString (result ), "prometheus exploded" )
804
+ },
805
+ },
806
+ }
807
+
808
+ mockAPI := & MockPrometheusAPI {}
809
+ mockServer := mcptest .NewUnstartedServer (t )
810
+ mockServer .AddTool (rulesTool , rulesToolHandler )
811
+
812
+ ctx := context .WithValue (context .Background (), apiClientKey {}, mockAPI )
813
+ err := mockServer .Start (ctx )
814
+ require .NoError (t , err )
815
+ defer mockServer .Close ()
816
+
817
+ mcpClient := mockServer .Client ()
818
+ defer mcpClient .Close ()
819
+
820
+ for _ , tc := range testCases {
821
+ t .Run (tc .name , func (t * testing.T ) {
822
+ mockAPI .RulesFunc = tc .mockRulesFunc
823
+
824
+ res , err := mcpClient .CallTool (ctx , tc .request )
825
+ require .NoError (t , err )
826
+
827
+ tc .validateResult (t , res , err )
828
+ })
829
+ }
830
+ }
0 commit comments