From d43d9d4bb3f60ff9dc6c9a4b7cef4c964f7d29c8 Mon Sep 17 00:00:00 2001 From: Alexander Zielenski <351783+alexzielenski@users.noreply.github.com> Date: Wed, 17 Jan 2024 13:18:27 -0800 Subject: [PATCH] bugfix: emit CEL rule strings using raw strings since they may contain quotes --- pkg/generators/openapi.go | 6 +++--- pkg/generators/openapi_test.go | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pkg/generators/openapi.go b/pkg/generators/openapi.go index 47b687248..087aecfcf 100644 --- a/pkg/generators/openapi.go +++ b/pkg/generators/openapi.go @@ -640,14 +640,14 @@ func (g openAPITypeWriter) emitExtensions(extensions []extension, unions []union for _, rule := range celRules { g.Do("map[string]interface{}{\n", nil) - g.Do("\"rule\": \"$.$\",\n", rule.Rule) + g.Do("\"rule\": `$.$`,\n", rule.Rule) if len(rule.Message) > 0 { - g.Do("\"message\": \"$.$\",\n", rule.Message) + g.Do("\"message\": `$.$`,\n", rule.Message) } if len(rule.MessageExpression) > 0 { - g.Do("\"messageExpression\": \"$.$\",\n", rule.MessageExpression) + g.Do("\"messageExpression\": `$.$`,\n", rule.MessageExpression) } if rule.OptionalOldSelf != nil && *rule.OptionalOldSelf { diff --git a/pkg/generators/openapi_test.go b/pkg/generators/openapi_test.go index 5348914e2..268abb3c7 100644 --- a/pkg/generators/openapi_test.go +++ b/pkg/generators/openapi_test.go @@ -2113,9 +2113,10 @@ func TestMultilineCELMarkerComments(t *testing.T) { type Blah struct { // +k8s:validation:cel[0]:rule="self.length() > 0" // +k8s:validation:cel[0]:message="string message" - // +k8s:validation:cel[1]:rule> - // +k8s:validation:cel[1]:rule> self.length() % 2 == 0 - // +k8s:validation:cel[1]:messageExpression="self + ' hello'" + // +k8s:validation:cel[1]:rule> !oldSelf.hasValue() || self.length() % 2 == 0 + // +k8s:validation:cel[1]:rule> ? self.field == "even" + // +k8s:validation:cel[1]:rule> : self.field == "odd" + // +k8s:validation:cel[1]:messageExpression="field must be whether the length of the string is even or odd" // +k8s:validation:cel[1]:optionalOldSelf // +optional Field string @@ -2140,12 +2141,12 @@ func TestMultilineCELMarkerComments(t *testing.T) { Extensions: spec.Extensions{ "x-kubernetes-validations": []interface{}{ map[string]interface{}{ - "rule": "self.length() > 0", - "message": "string message", + "rule": ` + "`self.length() > 0`" + `, + "message": ` + "`string message`" + `, }, map[string]interface{}{ - "rule": "self.length() % 2 == 0", - "messageExpression": "self + ' hello'", + "rule": ` + "` !oldSelf.hasValue() || self.length() % 2 == 0\n ? self.field == \"even\"\n : self.field == \"odd\"`" + `, + "messageExpression": ` + "`field must be whether the length of the string is even or odd`" + `, "optionalOldSelf": ptr.To[bool](true), }, }, @@ -2163,8 +2164,8 @@ func TestMultilineCELMarkerComments(t *testing.T) { Extensions: spec.Extensions{ "x-kubernetes-validations": []interface{}{ map[string]interface{}{ - "rule": "self == oldSelf", - "message": "message1", + "rule": ` + "`self == oldSelf`" + `, + "message": ` + "`message1`" + `, }, }, },