add test for the registered feature gates
This commit is contained in:
		| @@ -53,4 +53,19 @@ if [[ -n "${missing_defers}" ]]; then | |||||||
|   rc=1 |   rc=1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ensure all generic features are added in alphabetic order | ||||||
|  | lines=$(git grep 'genericfeatures[.].*:' -- pkg/features/kube_features.go) | ||||||
|  | sorted_lines=$(echo "$lines" | sort -f) | ||||||
|  | if [[ "$lines" != "$sorted_lines" ]]; then | ||||||
|  |   echo "Generic features in pkg/features/kube_features.go not sorted" >&2 | ||||||
|  |   echo >&2 | ||||||
|  |   echo "Expected:" >&2 | ||||||
|  |   echo "$sorted_lines" >&2 | ||||||
|  |   echo >&2 | ||||||
|  |   echo "Got:" >&2 | ||||||
|  |   echo "$lines" >&2 | ||||||
|  |   rc=1 | ||||||
|  | fi | ||||||
|  |  | ||||||
| exit $rc | exit $rc | ||||||
|   | |||||||
| @@ -1157,28 +1157,46 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS | |||||||
|  |  | ||||||
| 	genericfeatures.APIResponseCompression: {Default: true, PreRelease: featuregate.Beta}, | 	genericfeatures.APIResponseCompression: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.APIServerIdentity: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.APIServerTracing: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.ConsistentListFromCache: {Default: false, PreRelease: featuregate.Alpha}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.CustomResourceValidationExpressions: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 | ||||||
|  |  | ||||||
|  | 	genericfeatures.EfficientWatchResumption: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, | ||||||
|  |  | ||||||
| 	genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated}, | 	genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated}, | ||||||
|  |  | ||||||
| 	genericfeatures.KMSv2: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 | 	genericfeatures.KMSv2: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 | ||||||
|  |  | ||||||
| 	genericfeatures.KMSv2KDF: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 | 	genericfeatures.KMSv2KDF: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 | ||||||
|  |  | ||||||
| 	genericfeatures.ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Beta}, |  | ||||||
|  |  | ||||||
| 	genericfeatures.CustomResourceValidationExpressions: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.31 |  | ||||||
|  |  | ||||||
| 	genericfeatures.OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, | 	genericfeatures.OpenAPIEnums: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.RemainingItemCount: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, | ||||||
|  |  | ||||||
| 	genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 | 	genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 | ||||||
|  |  | ||||||
| 	genericfeatures.ServerSideFieldValidation: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 | 	genericfeatures.ServerSideFieldValidation: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.29 | ||||||
|  |  | ||||||
|  | 	genericfeatures.StorageVersionAPI: {Default: false, PreRelease: featuregate.Alpha}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.StorageVersionHash: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
| 	genericfeatures.StructuredAuthenticationConfiguration: {Default: false, PreRelease: featuregate.Alpha}, | 	genericfeatures.StructuredAuthenticationConfiguration: {Default: false, PreRelease: featuregate.Alpha}, | ||||||
|  |  | ||||||
| 	genericfeatures.StructuredAuthorizationConfiguration: {Default: false, PreRelease: featuregate.Alpha}, | 	genericfeatures.StructuredAuthorizationConfiguration: {Default: false, PreRelease: featuregate.Alpha}, | ||||||
|  |  | ||||||
| 	genericfeatures.UnauthenticatedHTTP2DOSMitigation: {Default: true, PreRelease: featuregate.Beta}, | 	genericfeatures.UnauthenticatedHTTP2DOSMitigation: {Default: true, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.ValidatingAdmissionPolicy: {Default: false, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.WatchBookmark: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, | ||||||
|  |  | ||||||
|  | 	genericfeatures.WatchList: {Default: false, PreRelease: featuregate.Alpha}, | ||||||
|  |  | ||||||
| 	genericfeatures.ZeroLimitedNominalConcurrencyShares: {Default: false, PreRelease: featuregate.Beta}, | 	genericfeatures.ZeroLimitedNominalConcurrencyShares: {Default: false, PreRelease: featuregate.Beta}, | ||||||
|  |  | ||||||
| 	// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed | 	// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								pkg/features/kube_features_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								pkg/features/kube_features_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2024 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package features | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestKubeFeatures(t *testing.T) { | ||||||
|  | 	features := utilfeature.DefaultFeatureGate.DeepCopy().GetAll() | ||||||
|  |  | ||||||
|  | 	for i := range features { | ||||||
|  | 		featureName := string(i) | ||||||
|  |  | ||||||
|  | 		if featureName == "AllAlpha" || featureName == "AllBeta" { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if _, ok := defaultKubernetesFeatureGates[i]; !ok { | ||||||
|  | 			t.Errorf("The feature gate %q is not registered", featureName) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Nikola
					Nikola