mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 03:57:41 +00:00
Add test coverage of result size of string operations
This commit is contained in:
parent
69a5a52896
commit
e4d16f34c1
@ -9315,6 +9315,32 @@ func TestValidateCustomResourceDefinitionValidation(t *testing.T) {
|
|||||||
forbidden("spec.validation.openAPIV3Schema.properties[f].x-kubernetes-validations[0].messageExpression"),
|
forbidden("spec.validation.openAPIV3Schema.properties[f].x-kubernetes-validations[0].messageExpression"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "x-kubernetes-validations rule with lowerAscii check should be within estimated cost limit",
|
||||||
|
opts: validationOptions{requireStructuralSchema: true},
|
||||||
|
input: apiextensions.CustomResourceValidation{
|
||||||
|
OpenAPIV3Schema: &apiextensions.JSONSchemaProps{
|
||||||
|
Type: "object",
|
||||||
|
Properties: map[string]apiextensions.JSONSchemaProps{
|
||||||
|
"f": {
|
||||||
|
Type: "array",
|
||||||
|
MaxItems: pointer.Int64(5),
|
||||||
|
Items: &apiextensions.JSONSchemaPropsOrArray{
|
||||||
|
Schema: &apiextensions.JSONSchemaProps{
|
||||||
|
Type: "string",
|
||||||
|
MaxLength: pointer.Int64(5),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
XValidations: apiextensions.ValidationRules{
|
||||||
|
{
|
||||||
|
Rule: "self.all(x, self.exists_one(y, x.lowerAscii() == y.lowerAscii()))",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "x-kubernetes-validations rule invalidated by messageExpression exceeding per-CRD estimated cost limit",
|
name: "x-kubernetes-validations rule invalidated by messageExpression exceeding per-CRD estimated cost limit",
|
||||||
opts: validationOptions{requireStructuralSchema: true},
|
opts: validationOptions{requireStructuralSchema: true},
|
||||||
|
@ -115,6 +115,7 @@ func TestCelCostStability(t *testing.T) {
|
|||||||
"self.val1.substring(4, 10).trim() == 'takes'": 6,
|
"self.val1.substring(4, 10).trim() == 'takes'": 6,
|
||||||
"self.val1.upperAscii() == 'ROOK TAKES 👑'": 6,
|
"self.val1.upperAscii() == 'ROOK TAKES 👑'": 6,
|
||||||
"self.val1.lowerAscii() == 'rook takes 👑'": 6,
|
"self.val1.lowerAscii() == 'rook takes 👑'": 6,
|
||||||
|
"self.val1.lowerAscii() == self.val1.lowerAscii()": 10,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{name: "escaped strings",
|
{name: "escaped strings",
|
||||||
|
@ -1691,9 +1691,9 @@ func TestCostEstimation(t *testing.T) {
|
|||||||
objType = withRule(objType, "self.str.replace(self.before, self.after) == 'does not matter'")
|
objType = withRule(objType, "self.str.replace(self.before, self.after) == 'does not matter'")
|
||||||
return &objType
|
return &objType
|
||||||
},
|
},
|
||||||
expectedCalcCost: 629154,
|
expectedCalcCost: 629152, // cost is based on the result size of the replace() call
|
||||||
setMaxElements: 10,
|
setMaxElements: 10,
|
||||||
expectedSetCost: 16,
|
expectedSetCost: 14,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "extended library split",
|
name: "extended library split",
|
||||||
|
@ -227,12 +227,36 @@ func TestStringLibrary(t *testing.T) {
|
|||||||
expectEsimatedCost: checker.CostEstimate{Min: 3, Max: 3},
|
expectEsimatedCost: checker.CostEstimate{Min: 3, Max: 3},
|
||||||
expectRuntimeCost: 3,
|
expectRuntimeCost: 3,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "lowerAsciiEquals",
|
||||||
|
expr: "'ABCDEFGHIJ abcdefghij'.lowerAscii() == 'abcdefghij ABCDEFGHIJ'.lowerAscii()",
|
||||||
|
expectEsimatedCost: checker.CostEstimate{Min: 7, Max: 9},
|
||||||
|
expectRuntimeCost: 9,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "upperAscii",
|
name: "upperAscii",
|
||||||
expr: "'ABCDEFGHIJ abcdefghij'.upperAscii()",
|
expr: "'ABCDEFGHIJ abcdefghij'.upperAscii()",
|
||||||
expectEsimatedCost: checker.CostEstimate{Min: 3, Max: 3},
|
expectEsimatedCost: checker.CostEstimate{Min: 3, Max: 3},
|
||||||
expectRuntimeCost: 3,
|
expectRuntimeCost: 3,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "upperAsciiEquals",
|
||||||
|
expr: "'ABCDEFGHIJ abcdefghij'.upperAscii() == 'abcdefghij ABCDEFGHIJ'.upperAscii()",
|
||||||
|
expectEsimatedCost: checker.CostEstimate{Min: 7, Max: 9},
|
||||||
|
expectRuntimeCost: 9,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "quote",
|
||||||
|
expr: "strings.quote('ABCDEFGHIJ abcdefghij')",
|
||||||
|
expectEsimatedCost: checker.CostEstimate{Min: 3, Max: 3},
|
||||||
|
expectRuntimeCost: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "quoteEquals",
|
||||||
|
expr: "strings.quote('ABCDEFGHIJ abcdefghij') == strings.quote('ABCDEFGHIJ abcdefghij')",
|
||||||
|
expectEsimatedCost: checker.CostEstimate{Min: 7, Max: 11},
|
||||||
|
expectRuntimeCost: 9,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "replace",
|
name: "replace",
|
||||||
expr: "'abc 123 def 123'.replace('123', '456')",
|
expr: "'abc 123 def 123'.replace('123', '456')",
|
||||||
|
Loading…
Reference in New Issue
Block a user