]> git.feebdaed.xyz Git - 0xmirror/kubernetes.git/commitdiff
Fix failing scheduler_perf test cases that don't set any feature gate
authorMaciej Skoczeń <mskoczen@google.com>
Fri, 14 Nov 2025 08:27:44 +0000 (08:27 +0000)
committerMaciej Skoczeń <mskoczen@google.com>
Wed, 19 Nov 2025 10:48:51 +0000 (10:48 +0000)
test/integration/scheduler_perf/scheduler_perf.go
test/integration/scheduler_perf/scheduler_perf_test.go

index f69889e111ba7499b9c868fa33ce63bcebefb73c..5f0b903b80e6921bf2445d4f44a5e9c4546afc84 100644 (file)
@@ -1168,13 +1168,9 @@ func setupTestCase(t testing.TB, tc *testCase, featureGates map[featuregate.Feat
 }
 
 func featureGatesMerge(src map[featuregate.Feature]bool, overrides map[featuregate.Feature]bool) map[featuregate.Feature]bool {
-       if len(src) == 0 {
-               return maps.Clone(overrides)
-       }
-       result := maps.Clone(src)
-       for feature, enabled := range overrides {
-               result[feature] = enabled
-       }
+       result := make(map[featuregate.Feature]bool)
+       maps.Copy(result, src)
+       maps.Copy(result, overrides)
        return result
 }
 
index d110655479a11c4630027783b464b3c25c14618d..0deccf942d5a4d9031443ff7f969cac1c9ee805d 100644 (file)
@@ -31,6 +31,7 @@ import (
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/util/sets"
        "k8s.io/client-go/kubernetes/fake"
+       "k8s.io/component-base/featuregate"
        testutils "k8s.io/kubernetes/test/utils"
        ktesting "k8s.io/kubernetes/test/utils/ktesting"
        "k8s.io/utils/ptr"
@@ -416,3 +417,82 @@ func createObjTemplateFile(t *testing.T, obj any) *string {
        }
        return &templateFile
 }
+
+func TestFeatureGatesMerge(t *testing.T) {
+       const (
+               FeatureA featuregate.Feature = "FeatureA"
+               FeatureB featuregate.Feature = "FeatureB"
+               FeatureC featuregate.Feature = "FeatureC"
+       )
+
+       tests := []struct {
+               name      string
+               src       map[featuregate.Feature]bool
+               overrides map[featuregate.Feature]bool
+               want      map[featuregate.Feature]bool
+       }{
+               {
+                       name:      "both nil, return empty map",
+                       src:       nil,
+                       overrides: nil,
+                       want:      map[featuregate.Feature]bool{},
+               },
+               {
+                       name:      "both empty, return empty map",
+                       src:       map[featuregate.Feature]bool{},
+                       overrides: map[featuregate.Feature]bool{},
+                       want:      map[featuregate.Feature]bool{},
+               },
+               {
+                       name:      "nil src, valid overrides",
+                       src:       nil,
+                       overrides: map[featuregate.Feature]bool{FeatureA: true},
+                       want:      map[featuregate.Feature]bool{FeatureA: true},
+               },
+               {
+                       name:      "valid src, nil overrides",
+                       src:       map[featuregate.Feature]bool{FeatureA: true},
+                       overrides: nil,
+                       want:      map[featuregate.Feature]bool{FeatureA: true},
+               },
+               {
+                       name:      "distinct features merged",
+                       src:       map[featuregate.Feature]bool{FeatureA: true},
+                       overrides: map[featuregate.Feature]bool{FeatureB: false},
+                       want:      map[featuregate.Feature]bool{FeatureA: true, FeatureB: false},
+               },
+               {
+                       name:      "overlap with the same value",
+                       src:       map[featuregate.Feature]bool{FeatureA: true, FeatureB: true},
+                       overrides: map[featuregate.Feature]bool{FeatureB: true},
+                       want:      map[featuregate.Feature]bool{FeatureA: true, FeatureB: true},
+               },
+               {
+                       name:      "overlap with override (true to false)",
+                       src:       map[featuregate.Feature]bool{FeatureA: true},
+                       overrides: map[featuregate.Feature]bool{FeatureA: false},
+                       want:      map[featuregate.Feature]bool{FeatureA: false},
+               },
+               {
+                       name:      "overlap with override (false to true)",
+                       src:       map[featuregate.Feature]bool{FeatureA: false},
+                       overrides: map[featuregate.Feature]bool{FeatureA: true},
+                       want:      map[featuregate.Feature]bool{FeatureA: true},
+               },
+               {
+                       name:      "mixed distinct and overlap",
+                       src:       map[featuregate.Feature]bool{FeatureA: true, FeatureB: true},
+                       overrides: map[featuregate.Feature]bool{FeatureB: false, FeatureC: true},
+                       want:      map[featuregate.Feature]bool{FeatureA: true, FeatureB: false, FeatureC: true},
+               },
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       got := featureGatesMerge(tt.src, tt.overrides)
+                       if diff := cmp.Diff(tt.want, got); diff != "" {
+                               t.Errorf("Unexpected featureGatesMerge result (-want,+got):\n%s", diff)
+                       }
+               })
+       }
+}