From 0670e5fe76ae733aa602351b2a3445c5b86354d3 Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Mon, 6 Mar 2023 23:32:29 +0000 Subject: [PATCH] Add test for context cancellation. Kubernetes-commit: 92e5b09471933bcdd6836c725939896c1d0cc0e6 --- .../validator_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkg/admission/plugin/validatingadmissionpolicy/validator_test.go b/pkg/admission/plugin/validatingadmissionpolicy/validator_test.go index 24afd11e8..daeb37835 100644 --- a/pkg/admission/plugin/validatingadmissionpolicy/validator_test.go +++ b/pkg/admission/plugin/validatingadmissionpolicy/validator_test.go @@ -620,3 +620,22 @@ func TestValidate(t *testing.T) { }) } } + +func TestContextCanceled(t *testing.T) { + fail := v1.Fail + + fakeAttr := admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, "default", "foo", schema.GroupVersionResource{}, "", admission.Create, nil, false, nil) + fakeVersionedAttr, _ := generic.NewVersionedAttributes(fakeAttr, schema.GroupVersionKind{}, nil) + fc := cel.NewFilterCompiler() + f := fc.Compile([]cel.ExpressionAccessor{&ValidationCondition{Expression: "[1,2,3,4,5,6,7,8,9,10].map(x, [1,2,3,4,5,6,7,8,9,10].map(y, x*y)) == []"}}, cel.OptionalVariableDeclarations{HasParams: false, HasAuthorizer: false}, celconfig.PerCallLimit) + v := validator{ + failPolicy: &fail, + filter: f, + } + ctx, cancel := context.WithCancel(context.TODO()) + cancel() + decisions := v.Validate(ctx, fakeVersionedAttr, nil, celconfig.RuntimeCELCostBudget) + if len(decisions) != 1 || !strings.Contains(decisions[0].Message, "operation interrupted") { + t.Errorf("Expected 'operation interrupted' but got %v", decisions) + } +}