Skip to content

Commit 8f1e696

Browse files
Add multi-violation CEL integration tests for OIDCConfigRef and AuthzConfigRef (#4309)
Test that the API server surfaces multiple CEL violations simultaneously: - OIDCConfigRef: type=configMap with only inline set triggers both the missing-configMap and extra-inline rules at once - OIDCConfigRef: type=inline with inline+kubernetes set triggers the kubernetes-not-allowed rule - AuthzConfigRef: type=configMap with only inline set triggers both the missing-configMap and extra-inline rules at once Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Chris Burns <ChrisJBurns@users.noreply.github.com>
1 parent a52132a commit 8f1e696

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

cmd/thv-operator/test-integration/mcp-server/mcpserver_cel_validation_integration_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,38 @@ var _ = Describe("CEL Validation for OIDCConfigRef and AuthzConfigRef", Label("k
164164
})
165165
})
166166

167+
Context("OIDCConfigRef multi-violation CEL validation", func() {
168+
It("should report both missing-configMap and extra-inline when type=configMap but only inline is set", func() {
169+
server := newMinimalMCPServer("oidc-cm-only-inline", &mcpv1alpha1.OIDCConfigRef{
170+
Type: "configMap",
171+
Inline: &mcpv1alpha1.InlineOIDCConfig{
172+
Issuer: "https://example.com",
173+
},
174+
}, nil)
175+
err := k8sClient.Create(ctx, server)
176+
Expect(err).To(HaveOccurred())
177+
Expect(err.Error()).To(And(
178+
ContainSubstring("configMap must be set when type is 'configMap'"),
179+
ContainSubstring("inline must be set when type is 'inline'"),
180+
))
181+
})
182+
183+
It("should report kubernetes-not-allowed violation when type=inline with inline and kubernetes both set", func() {
184+
server := newMinimalMCPServer("oidc-inline-with-k8s", &mcpv1alpha1.OIDCConfigRef{
185+
Type: "inline",
186+
Inline: &mcpv1alpha1.InlineOIDCConfig{
187+
Issuer: "https://example.com",
188+
},
189+
Kubernetes: &mcpv1alpha1.KubernetesOIDCConfig{
190+
ServiceAccount: "test-sa",
191+
},
192+
}, nil)
193+
err := k8sClient.Create(ctx, server)
194+
Expect(err).To(HaveOccurred())
195+
Expect(err.Error()).To(ContainSubstring("kubernetes must not be set when type is not 'kubernetes'"))
196+
})
197+
})
198+
167199
Context("AuthzConfigRef CEL validation", func() {
168200
Context("type=configMap", func() {
169201
It("should reject when configMap field is missing", func() {
@@ -239,4 +271,21 @@ var _ = Describe("CEL Validation for OIDCConfigRef and AuthzConfigRef", Label("k
239271
})
240272
})
241273
})
274+
275+
Context("AuthzConfigRef multi-violation CEL validation", func() {
276+
It("should report both missing-configMap and extra-inline when type=configMap but only inline is set", func() {
277+
server := newMinimalMCPServer("authz-cm-only-inline", nil, &mcpv1alpha1.AuthzConfigRef{
278+
Type: "configMap",
279+
Inline: &mcpv1alpha1.InlineAuthzConfig{
280+
Policies: []string{"permit(principal, action, resource);"},
281+
},
282+
})
283+
err := k8sClient.Create(ctx, server)
284+
Expect(err).To(HaveOccurred())
285+
Expect(err.Error()).To(And(
286+
ContainSubstring("configMap must be set when type is 'configMap'"),
287+
ContainSubstring("inline must be set when type is 'inline'"),
288+
))
289+
})
290+
})
242291
})

0 commit comments

Comments
 (0)