Fix unit tests for filtering

This commit is contained in:
Jordan Liggitt 2024-09-09 16:45:32 -04:00
parent 304d025e26
commit 6a41706072
No known key found for this signature in database
2 changed files with 29 additions and 4 deletions

View File

@ -529,7 +529,7 @@ func TestFilter(t *testing.T) {
*simpleLabelSelector, *simpleLabelSelector,
}, },
}), }),
enableSelectors: true, enableSelectors: false,
compatibilityVersion: v130, compatibilityVersion: v130,
}, },
{ {
@ -602,7 +602,7 @@ func TestFilter(t *testing.T) {
attributes: newValidAttribute(&podObject, false), attributes: newValidAttribute(&podObject, false),
results: []EvaluationResult{ results: []EvaluationResult{
{ {
EvalResult: celtypes.True, Error: fmt.Errorf("fieldSelector"),
}, },
}, },
authorizer: newAuthzAllowMatch(authorizer.AttributesRecord{ authorizer: newAuthzAllowMatch(authorizer.AttributesRecord{
@ -615,6 +615,7 @@ func TestFilter(t *testing.T) {
Verb: "create", Verb: "create",
APIVersion: "*", APIVersion: "*",
}), }),
enableSelectors: false,
compatibilityVersion: v131, compatibilityVersion: v131,
}, },
{ {
@ -871,6 +872,7 @@ func TestFilter(t *testing.T) {
for _, tc := range cases { for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
environment.DisableBaseEnvSetCachingForTests()
if tc.enableSelectors { if tc.enableSelectors {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AuthorizeWithSelectors, true) featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AuthorizeWithSelectors, true)
} }
@ -896,6 +898,7 @@ func TestFilter(t *testing.T) {
if f == nil { if f == nil {
t.Fatalf("unexpected nil validator") t.Fatalf("unexpected nil validator")
} }
validations := tc.validations validations := tc.validations
CompilationResults := f.(*filter).compilationResults CompilationResults := f.(*filter).compilationResults
require.Equal(t, len(validations), len(CompilationResults)) require.Equal(t, len(validations), len(CompilationResults))
@ -913,8 +916,13 @@ func TestFilter(t *testing.T) {
} }
require.Equal(t, len(evalResults), len(tc.results)) require.Equal(t, len(evalResults), len(tc.results))
for i, result := range tc.results { for i, result := range tc.results {
if result.Error != nil && evalResults[i].Error == nil {
t.Errorf("Expected error result containing '%v' but got non-error", result.Error)
continue
}
if result.Error != nil && !strings.Contains(evalResults[i].Error.Error(), result.Error.Error()) { if result.Error != nil && !strings.Contains(evalResults[i].Error.Error(), result.Error.Error()) {
t.Errorf("Expected result '%v' but got '%v'", result.Error, evalResults[i].Error) t.Errorf("Expected result '%v' but got '%v'", result.Error, evalResults[i].Error)
continue
} }
if result.Error == nil && evalResults[i].Error != nil { if result.Error == nil && evalResults[i].Error != nil {
t.Errorf("Expected result '%v' but got error '%v'", result.EvalResult, evalResults[i].Error) t.Errorf("Expected result '%v' but got error '%v'", result.EvalResult, evalResults[i].Error)

View File

@ -191,6 +191,19 @@ var StrictCostOpt = VersionedOptions{
}, },
} }
// cacheBaseEnvs controls whether calls to MustBaseEnvSet are cached.
// Defaults to true, may be disabled by calling DisableBaseEnvSetCachingForTests.
var cacheBaseEnvs = true
// DisableBaseEnvSetCachingForTests clears and disables base env caching.
// This is only intended for unit tests exercising MustBaseEnvSet directly with different enablement options.
// It does not clear other initialization paths that may cache results of calling MustBaseEnvSet.
func DisableBaseEnvSetCachingForTests() {
cacheBaseEnvs = false
baseEnvs.Clear()
baseEnvsWithOption.Clear()
}
// MustBaseEnvSet returns the common CEL base environments for Kubernetes for Version, or panics // MustBaseEnvSet returns the common CEL base environments for Kubernetes for Version, or panics
// if the version is nil, or does not have major and minor components. // if the version is nil, or does not have major and minor components.
// //
@ -216,7 +229,9 @@ func MustBaseEnvSet(ver *version.Version, strictCost bool) *EnvSet {
} }
entry, _, _ = baseEnvsSingleflight.Do(key, func() (interface{}, error) { entry, _, _ = baseEnvsSingleflight.Do(key, func() (interface{}, error) {
entry := mustNewEnvSet(ver, baseOpts) entry := mustNewEnvSet(ver, baseOpts)
baseEnvs.Store(key, entry) if cacheBaseEnvs {
baseEnvs.Store(key, entry)
}
return entry, nil return entry, nil
}) })
} else { } else {
@ -225,7 +240,9 @@ func MustBaseEnvSet(ver *version.Version, strictCost bool) *EnvSet {
} }
entry, _, _ = baseEnvsWithOptionSingleflight.Do(key, func() (interface{}, error) { entry, _, _ = baseEnvsWithOptionSingleflight.Do(key, func() (interface{}, error) {
entry := mustNewEnvSet(ver, baseOptsWithoutStrictCost) entry := mustNewEnvSet(ver, baseOptsWithoutStrictCost)
baseEnvsWithOption.Store(key, entry) if cacheBaseEnvs {
baseEnvsWithOption.Store(key, entry)
}
return entry, nil return entry, nil
}) })
} }