m/n/kubernetes: fix flake in TestAsFlags
This test was flaky due to Go's map iteration not being deterministic.
Sort the output to make sure we do not introduce unnecessary
non-determinism.
Fixes: #363
Change-Id: If70486306a809b7d33bc17206600b0f750429b7d
Reviewed-on: https://review.monogon.dev/c/monogon/+/3708
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/kubernetes/feature_gates.go b/metropolis/node/kubernetes/feature_gates.go
index 9be3b35..074aecd 100644
--- a/metropolis/node/kubernetes/feature_gates.go
+++ b/metropolis/node/kubernetes/feature_gates.go
@@ -2,6 +2,7 @@
import (
"fmt"
+ "sort"
"strings"
"k8s.io/component-base/featuregate"
@@ -14,10 +15,15 @@
func (fgs featureGates) AsFlag() string {
var strb strings.Builder
strb.WriteString("--feature-gates=")
- i := 0
- for f, en := range fgs {
- fmt.Fprintf(&strb, "%s=%v", string(f), en)
- if i++; i != len(fgs) {
+ features := make([]string, 0, len(fgs))
+ for f := range fgs {
+ features = append(features, string(f))
+ }
+ // Ensure deterministic output by sorting the map keys
+ sort.Strings(features)
+ for i, f := range features {
+ fmt.Fprintf(&strb, "%s=%v", f, fgs[featuregate.Feature(f)])
+ if i+1 != len(features) {
strb.WriteByte(',')
}
}