Skip to content

Commit c643889

Browse files
authored
test(core): add denied resources tests for resources_scale tool (containers#551)
Signed-off-by: Marc Nuri <[email protected]>
1 parent 5f52c9d commit c643889

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

pkg/mcp/resources_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
726814
func TestResources(t *testing.T) {
727815
suite.Run(t, new(ResourcesSuite))
728816
}

0 commit comments

Comments
 (0)