@@ -696,3 +696,69 @@ func TestTargetsMetadataToolHandler(t *testing.T) {
696
696
})
697
697
}
698
698
}
699
+
700
+ func TestListTargetsToolHandler (t * testing.T ) {
701
+ testCases := []struct {
702
+ name string
703
+ request mcp.CallToolRequest
704
+ mockTargetsFunc func (ctx context.Context ) (promv1.TargetsResult , error )
705
+ validateResult func (t * testing.T , result * mcp.CallToolResult , err error )
706
+ }{
707
+ {
708
+ name : "success" ,
709
+ request : mcp.CallToolRequest {
710
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
711
+ Params : mcp.CallToolParams {
712
+ Name : "list_targets" ,
713
+ },
714
+ },
715
+ mockTargetsFunc : func (ctx context.Context ) (promv1.TargetsResult , error ) {
716
+ return promv1.TargetsResult {}, nil
717
+ },
718
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
719
+ require .NoError (t , err )
720
+ require .False (t , result .IsError )
721
+ },
722
+ },
723
+ {
724
+ name : "API error" ,
725
+ request : mcp.CallToolRequest {
726
+ Request : mcp.Request {Method : string (mcp .MethodToolsCall )},
727
+ Params : mcp.CallToolParams {
728
+ Name : "list_targets" ,
729
+ },
730
+ },
731
+ mockTargetsFunc : func (ctx context.Context ) (promv1.TargetsResult , error ) {
732
+ return promv1.TargetsResult {}, errors .New ("prometheus exploded" )
733
+ },
734
+ validateResult : func (t * testing.T , result * mcp.CallToolResult , err error ) {
735
+ require .NoError (t , err )
736
+ require .True (t , result .IsError )
737
+ require .Contains (t , toolCallResultAsString (result ), "prometheus exploded" )
738
+ },
739
+ },
740
+ }
741
+
742
+ mockAPI := & MockPrometheusAPI {}
743
+ mockServer := mcptest .NewUnstartedServer (t )
744
+ mockServer .AddTool (targetsTool , targetsToolHandler )
745
+
746
+ ctx := context .WithValue (context .Background (), apiClientKey {}, mockAPI )
747
+ err := mockServer .Start (ctx )
748
+ require .NoError (t , err )
749
+ defer mockServer .Close ()
750
+
751
+ mcpClient := mockServer .Client ()
752
+ defer mcpClient .Close ()
753
+
754
+ for _ , tc := range testCases {
755
+ t .Run (tc .name , func (t * testing.T ) {
756
+ mockAPI .TargetsFunc = tc .mockTargetsFunc
757
+
758
+ res , err := mcpClient .CallTool (ctx , tc .request )
759
+ require .NoError (t , err )
760
+
761
+ tc .validateResult (t , res , err )
762
+ })
763
+ }
764
+ }
0 commit comments