@@ -723,6 +723,94 @@ func (s *ResourcesSuite) TestResourcesScale() {
723723 })
724724}
725725
726+ func (s * ResourcesSuite ) TestResourcesScaleDenied () {
727+ s .Require ().NoError (toml .Unmarshal ([]byte (`
728+ denied_resources = [
729+ { group = "apps", version = "v1" },
730+ { group = "", version = "v1", kind = "ReplicationController" }
731+ ]
732+ ` ), s .Cfg ), "Expected to parse denied resources config" )
733+ s .InitMcpClient ()
734+ s .Run ("resources_scale get (denied by kind)" , func () {
735+ deniedByKind , err := s .CallTool ("resources_scale" , map [string ]interface {}{
736+ "apiVersion" : "v1" ,
737+ "kind" : "ReplicationController" ,
738+ "namespace" : "default" ,
739+ "name" : "nonexistent-rc" ,
740+ })
741+ s .Run ("has error" , func () {
742+ s .Truef (deniedByKind .IsError , "call tool should fail" )
743+ s .Nilf (err , "call tool should not return error object" )
744+ })
745+ s .Run ("describes denial" , func () {
746+ msg := deniedByKind .Content [0 ].(mcp.TextContent ).Text
747+ s .Contains (msg , "resource not allowed:" )
748+ expectedMessage := "failed to get/update resource scale:(.+:)? resource not allowed: /v1, Kind=ReplicationController"
749+ s .Regexpf (expectedMessage , msg ,
750+ "expected descriptive error '%s', got %v" , expectedMessage , deniedByKind .Content [0 ].(mcp.TextContent ).Text )
751+ })
752+ })
753+ s .Run ("resources_scale update (denied by kind)" , func () {
754+ deniedByKind , err := s .CallTool ("resources_scale" , map [string ]interface {}{
755+ "apiVersion" : "v1" ,
756+ "kind" : "ReplicationController" ,
757+ "namespace" : "default" ,
758+ "name" : "nonexistent-rc" ,
759+ "scale" : 1337 ,
760+ })
761+ s .Run ("has error" , func () {
762+ s .Truef (deniedByKind .IsError , "call tool should fail" )
763+ s .Nilf (err , "call tool should not return error object" )
764+ })
765+ s .Run ("describes denial" , func () {
766+ msg := deniedByKind .Content [0 ].(mcp.TextContent ).Text
767+ s .Contains (msg , "resource not allowed:" )
768+ expectedMessage := "failed to get/update resource scale:(.+:)? resource not allowed: /v1, Kind=ReplicationController"
769+ s .Regexpf (expectedMessage , msg ,
770+ "expected descriptive error '%s', got %v" , expectedMessage , deniedByKind .Content [0 ].(mcp.TextContent ).Text )
771+ })
772+ })
773+ s .Run ("resources_scale get (denied by group)" , func () {
774+ deniedByGroup , err := s .CallTool ("resources_scale" , map [string ]interface {}{
775+ "apiVersion" : "apps/v1" ,
776+ "kind" : "StatefulSet" ,
777+ "namespace" : "default" ,
778+ "name" : "nonexistent-statefulset" ,
779+ })
780+ s .Run ("has error" , func () {
781+ s .Truef (deniedByGroup .IsError , "call tool should fail" )
782+ s .Nilf (err , "call tool should not return error object" )
783+ })
784+ s .Run ("describes denial" , func () {
785+ msg := deniedByGroup .Content [0 ].(mcp.TextContent ).Text
786+ s .Contains (msg , "resource not allowed:" )
787+ expectedMessage := "failed to get/update resource scale:(.+:)? resource not allowed: apps/v1, Kind=StatefulSet"
788+ s .Regexpf (expectedMessage , msg ,
789+ "expected descriptive error '%s', got %v" , expectedMessage , deniedByGroup .Content [0 ].(mcp.TextContent ).Text )
790+ })
791+ })
792+ s .Run ("resources_scale update (denied by group)" , func () {
793+ deniedByGroup , err := s .CallTool ("resources_scale" , map [string ]interface {}{
794+ "apiVersion" : "apps/v1" ,
795+ "kind" : "StatefulSet" ,
796+ "namespace" : "default" ,
797+ "name" : "nonexistent-statefulset" ,
798+ "scale" : 1337 ,
799+ })
800+ s .Run ("has error" , func () {
801+ s .Truef (deniedByGroup .IsError , "call tool should fail" )
802+ s .Nilf (err , "call tool should not return error object" )
803+ })
804+ s .Run ("describes denial" , func () {
805+ msg := deniedByGroup .Content [0 ].(mcp.TextContent ).Text
806+ s .Contains (msg , "resource not allowed:" )
807+ expectedMessage := "failed to get/update resource scale:(.+:)? resource not allowed: apps/v1, Kind=StatefulSet"
808+ s .Regexpf (expectedMessage , msg ,
809+ "expected descriptive error '%s', got %v" , expectedMessage , deniedByGroup .Content [0 ].(mcp.TextContent ).Text )
810+ })
811+ })
812+ }
813+
726814func TestResources (t * testing.T ) {
727815 suite .Run (t , new (ResourcesSuite ))
728816}
0 commit comments