Skip to content

Commit 8a32f34

Browse files
p0lyn0mialbenluddy
andcommitted
kube/features: improve unit testing known/registered features
Co-authored-by: Ben Luddy <bluddy@redhat.com>
1 parent 9951359 commit 8a32f34

1 file changed

Lines changed: 43 additions & 9 deletions

File tree

pkg/features/kube_features_test.go

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,56 @@ limitations under the License.
1717
package features
1818

1919
import (
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

Comments
 (0)