@@ -17,22 +17,56 @@ limitations under the License.
1717package features
1818
1919import (
20- utilfeature "k8s.io/apiserver/pkg/util/feature"
2120 "testing"
21+
22+ utilfeature "k8s.io/apiserver/pkg/util/feature"
23+ clientfeatures "k8s.io/client-go/features"
24+ "k8s.io/component-base/featuregate"
2225)
2326
24- func TestKubeFeatures (t * testing.T ) {
25- features := utilfeature .DefaultFeatureGate .DeepCopy ().GetAll ()
27+ // TestKubeFeaturesRegistered tests that all kube features are registered.
28+ func TestKubeFeaturesRegistered (t * testing.T ) {
29+ registeredFeatures := utilfeature .DefaultFeatureGate .DeepCopy ().GetAll ()
2630
27- for i := range features {
28- featureName := string (i )
31+ for featureName := range defaultKubernetesFeatureGates {
32+ if _ , ok := registeredFeatures [featureName ]; ! ok {
33+ t .Errorf ("The feature gate %q is not registered in the DefaultFeatureGate" , featureName )
34+ }
35+ }
36+ }
2937
30- if featureName == "AllAlpha" || featureName == "AllBeta" {
31- continue
38+ // TestClientFeaturesRegistered tests that all client features are registered.
39+ func TestClientFeaturesRegistered (t * testing.T ) {
40+ onlyClientFg := featuregate .NewFeatureGate ()
41+ if err := clientfeatures .AddFeaturesToExistingFeatureGates (& clientAdapter {onlyClientFg }); err != nil {
42+ t .Fatal (err )
43+ }
44+ registeredFeatures := utilfeature .DefaultFeatureGate .DeepCopy ().GetAll ()
45+
46+ for featureName := range onlyClientFg .GetAll () {
47+ if _ , ok := registeredFeatures [featureName ]; ! ok {
48+ t .Errorf ("The client-go's feature gate %q is not registered in the DefaultFeatureGate" , featureName )
3249 }
50+ }
51+ }
52+
53+ // TestAllRegisteredFeaturesExpected tests that the set of features actually registered does not
54+ // include any features other than those on the list in this package or in client-go's feature
55+ // package.
56+ func TestAllRegisteredFeaturesExpected (t * testing.T ) {
57+ registeredFeatures := utilfeature .DefaultFeatureGate .DeepCopy ().GetAll ()
58+ knownFeatureGates := featuregate .NewFeatureGate ()
59+ if err := clientfeatures .AddFeaturesToExistingFeatureGates (& clientAdapter {knownFeatureGates }); err != nil {
60+ t .Fatal (err )
61+ }
62+ if err := knownFeatureGates .Add (defaultKubernetesFeatureGates ); err != nil {
63+ t .Fatal (err )
64+ }
65+ knownFeatures := knownFeatureGates .GetAll ()
3366
34- if _ , ok := defaultKubernetesFeatureGates [i ]; ! ok {
35- t .Errorf ("The feature gate %q is not registered" , featureName )
67+ for registeredFeature := range registeredFeatures {
68+ if _ , ok := knownFeatures [registeredFeature ]; ! ok {
69+ t .Errorf ("The feature gate %q is not from known feature gates" , registeredFeature )
3670 }
3771 }
3872}
0 commit comments