Skip to content

Commit 9287c81

Browse files
committed
Improve CEL variable unit tests
Signed-off-by: Stefan Büringer [email protected]
1 parent 1170de4 commit 9287c81

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

internal/controllers/clusterclass/clusterclass_controller_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import (
2929
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
"k8s.io/apimachinery/pkg/types"
32+
"k8s.io/apimachinery/pkg/util/version"
33+
utilversion "k8s.io/apiserver/pkg/util/version"
3234
utilfeature "k8s.io/component-base/featuregate/testing"
3335
"k8s.io/utils/ptr"
3436
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -827,7 +829,7 @@ func TestReconciler_reconcileVariables(t *testing.T) {
827829
},
828830
XValidations: []clusterv1.ValidationRule{{
829831
Rule: "true",
830-
MessageExpression: "'test error message, got value %s'.format([self])",
832+
MessageExpression: "'test error message, got value %s'.format([self.enabled])",
831833
FieldPath: ".enabled",
832834
}},
833835
},
@@ -889,7 +891,7 @@ func TestReconciler_reconcileVariables(t *testing.T) {
889891
},
890892
XValidations: []clusterv1.ValidationRule{{
891893
Rule: "true",
892-
MessageExpression: "'test error message, got value %s'.format([self])",
894+
MessageExpression: "'test error message, got value %s'.format([self.enabled])",
893895
FieldPath: ".enabled",
894896
}},
895897
},
@@ -1196,6 +1198,17 @@ func TestReconciler_reconcileVariables(t *testing.T) {
11961198
RuntimeClient: fakeRuntimeClient,
11971199
}
11981200

1201+
// Pin the compatibility version used in variable CEL validation to 1.29, so we don't have to continuously refactor
1202+
// the unit tests that verify that compatibility is handled correctly.
1203+
effectiveVer := utilversion.DefaultComponentGlobalsRegistry.EffectiveVersionFor(utilversion.DefaultKubeComponent)
1204+
if effectiveVer != nil {
1205+
g.Expect(effectiveVer.MinCompatibilityVersion()).To(Equal(version.MustParse("v1.29")))
1206+
} else {
1207+
v := utilversion.DefaultKubeEffectiveVersion()
1208+
v.SetMinCompatibilityVersion(version.MustParse("v1.29"))
1209+
g.Expect(utilversion.DefaultComponentGlobalsRegistry.Register(utilversion.DefaultKubeComponent, v, nil)).To(Succeed())
1210+
}
1211+
11991212
err := r.reconcileVariables(ctx, tt.clusterClass)
12001213

12011214
// Cleanup condition timestamps for easier comparison.
@@ -1204,6 +1217,7 @@ func TestReconciler_reconcileVariables(t *testing.T) {
12041217
}
12051218
g.Expect(tt.wantConditions).To(Equal(tt.clusterClass.Status.Conditions))
12061219
if tt.wantErrMessage != "" {
1220+
g.Expect(err).To(HaveOccurred())
12071221
g.Expect(err.Error()).To(Equal(tt.wantErrMessage))
12081222
return
12091223
}

internal/topology/variables/clusterclass_variable_validation_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ import (
2121
"strings"
2222
"testing"
2323

24+
. "github.com/onsi/gomega"
2425
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2526
"k8s.io/apimachinery/pkg/util/validation/field"
27+
"k8s.io/apimachinery/pkg/util/version"
28+
utilversion "k8s.io/apiserver/pkg/util/version"
2629
"k8s.io/utils/ptr"
2730

2831
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
@@ -339,6 +342,19 @@ func Test_ValidateClusterClassVariables(t *testing.T) {
339342

340343
for _, tt := range tests {
341344
t.Run(tt.name, func(t *testing.T) {
345+
g := NewWithT(t)
346+
347+
// Pin the compatibility version used in variable CEL validation to 1.29, so we don't have to continuously refactor
348+
// the unit tests that verify that compatibility is handled correctly.
349+
effectiveVer := utilversion.DefaultComponentGlobalsRegistry.EffectiveVersionFor(utilversion.DefaultKubeComponent)
350+
if effectiveVer != nil {
351+
g.Expect(effectiveVer.MinCompatibilityVersion()).To(Equal(version.MustParse("v1.29")))
352+
} else {
353+
v := utilversion.DefaultKubeEffectiveVersion()
354+
v.SetMinCompatibilityVersion(version.MustParse("v1.29"))
355+
g.Expect(utilversion.DefaultComponentGlobalsRegistry.Register(utilversion.DefaultKubeComponent, v, nil)).To(Succeed())
356+
}
357+
342358
gotErrs := ValidateClusterClassVariables(ctx,
343359
tt.oldClusterClassVariables,
344360
tt.clusterClassVariables,

internal/webhooks/clusterclass_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
corev1 "k8s.io/api/core/v1"
2626
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2727
"k8s.io/apimachinery/pkg/runtime"
28+
"k8s.io/apimachinery/pkg/util/version"
29+
utilversion "k8s.io/apiserver/pkg/util/version"
2830
utilfeature "k8s.io/component-base/featuregate/testing"
2931
"k8s.io/utils/ptr"
3032
ctrl "sigs.k8s.io/controller-runtime"
@@ -1855,6 +1857,17 @@ func TestClusterClassValidation(t *testing.T) {
18551857
WithIndex(&clusterv1.Cluster{}, index.ClusterClassNameField, index.ClusterByClusterClassClassName).
18561858
Build()
18571859

1860+
// Pin the compatibility version used in variable CEL validation to 1.29, so we don't have to continuously refactor
1861+
// the unit tests that verify that compatibility is handled correctly.
1862+
effectiveVer := utilversion.DefaultComponentGlobalsRegistry.EffectiveVersionFor(utilversion.DefaultKubeComponent)
1863+
if effectiveVer != nil {
1864+
g.Expect(effectiveVer.MinCompatibilityVersion()).To(Equal(version.MustParse("v1.29")))
1865+
} else {
1866+
v := utilversion.DefaultKubeEffectiveVersion()
1867+
v.SetMinCompatibilityVersion(version.MustParse("v1.29"))
1868+
g.Expect(utilversion.DefaultComponentGlobalsRegistry.Register(utilversion.DefaultKubeComponent, v, nil)).To(Succeed())
1869+
}
1870+
18581871
// Create the webhook and add the fakeClient as its client.
18591872
webhook := &ClusterClass{Client: fakeClient}
18601873
err := webhook.validate(ctx, tt.old, tt.in)

0 commit comments

Comments
 (0)