Skip to content

Commit df431ac

Browse files
committed
[chore] Fix featuregate usage in controller tests
We haven't been unsetting feature gates in controller tests after ending the test, leading to them being enabled for the duration of the test suite. In one case, a test actually depended on this fact, and I needed to set the gate in it explicitly. Also switched to use the gates explicitly vs parsing flags.
1 parent cdff25a commit df431ac

File tree

2 files changed

+55
-27
lines changed

2 files changed

+55
-27
lines changed

controllers/builder_test.go

+41-27
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package controllers
1616

1717
import (
18-
"strings"
1918
"testing"
2019

2120
cmv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
@@ -1245,7 +1244,7 @@ service:
12451244
name string
12461245
args args
12471246
want []client.Object
1248-
featuregates []string
1247+
featuregates []*colfeaturegate.Gate
12491248
wantErr bool
12501249
opts []config.Option
12511250
}{
@@ -2188,8 +2187,7 @@ prometheus_cr:
21882187
},
21892188
},
21902189
},
2191-
wantErr: false,
2192-
featuregates: []string{},
2190+
wantErr: false,
21932191
},
21942192
{
21952193
name: "target allocator mtls enabled",
@@ -2827,7 +2825,7 @@ prometheus_cr:
28272825
opts: []config.Option{
28282826
config.WithCertManagerAvailability(certmanager.Available),
28292827
},
2830-
featuregates: []string{"operator.targetallocator.mtls"},
2828+
featuregates: []*colfeaturegate.Gate{featuregate.EnableTargetAllocatorMTLS},
28312829
},
28322830
}
28332831
for _, tt := range tests {
@@ -2848,13 +2846,18 @@ prometheus_cr:
28482846
targetAllocator, err := collector.TargetAllocator(params)
28492847
require.NoError(t, err)
28502848
params.TargetAllocator = targetAllocator
2851-
if len(tt.featuregates) > 0 {
2852-
fg := strings.Join(tt.featuregates, ",")
2853-
flagset := featuregate.Flags(colfeaturegate.GlobalRegistry())
2854-
if err = flagset.Set(featuregate.FeatureGatesFlag, fg); err != nil {
2855-
t.Errorf("featuregate setting error = %v", err)
2849+
registry := colfeaturegate.GlobalRegistry()
2850+
for _, gate := range tt.featuregates {
2851+
current := gate.IsEnabled()
2852+
require.False(t, current, "only enable gates which are disabled by default")
2853+
if setErr := registry.Set(gate.ID(), true); setErr != nil {
2854+
require.NoError(t, setErr)
28562855
return
28572856
}
2857+
t.Cleanup(func() {
2858+
setErr := registry.Set(gate.ID(), current)
2859+
require.NoError(t, setErr)
2860+
})
28582861
}
28592862
got, err := BuildCollector(params)
28602863
if (err != nil) != tt.wantErr {
@@ -2909,7 +2912,7 @@ service:
29092912
name string
29102913
args args
29112914
want []client.Object
2912-
featuregates []string
2915+
featuregates []*colfeaturegate.Gate
29132916
wantErr bool
29142917
opts []config.Option
29152918
}{
@@ -3396,7 +3399,7 @@ service:
33963399
},
33973400
},
33983401
wantErr: false,
3399-
featuregates: []string{},
3402+
featuregates: []*colfeaturegate.Gate{},
34003403
},
34013404
}
34023405
for _, tt := range tests {
@@ -3417,13 +3420,20 @@ service:
34173420
targetAllocator, err := collector.TargetAllocator(params)
34183421
require.NoError(t, err)
34193422
params.TargetAllocator = targetAllocator
3420-
featuregates := []string{"operator.collector.targetallocatorcr"}
3423+
featuregates := []*colfeaturegate.Gate{featuregate.CollectorUsesTargetAllocatorCR}
34213424
featuregates = append(featuregates, tt.featuregates...)
3422-
fg := strings.Join(featuregates, ",")
3423-
flagset := featuregate.Flags(colfeaturegate.GlobalRegistry())
3424-
if err = flagset.Set(featuregate.FeatureGatesFlag, fg); err != nil {
3425-
t.Errorf("featuregate setting error = %v", err)
3426-
return
3425+
registry := colfeaturegate.GlobalRegistry()
3426+
for _, gate := range featuregates {
3427+
current := gate.IsEnabled()
3428+
require.False(t, current, "only enable gates which are disabled by default")
3429+
if setErr := registry.Set(gate.ID(), true); setErr != nil {
3430+
require.NoError(t, setErr)
3431+
return
3432+
}
3433+
t.Cleanup(func() {
3434+
setErr := registry.Set(gate.ID(), current)
3435+
require.NoError(t, setErr)
3436+
})
34273437
}
34283438
got, err := BuildCollector(params)
34293439
if (err != nil) != tt.wantErr {
@@ -3445,7 +3455,7 @@ func TestBuildTargetAllocator(t *testing.T) {
34453455
name string
34463456
args args
34473457
want []client.Object
3448-
featuregates []string
3458+
featuregates []*colfeaturegate.Gate
34493459
wantErr bool
34503460
opts []config.Option
34513461
}{
@@ -4019,8 +4029,7 @@ prometheus_cr:
40194029
},
40204030
},
40214031
},
4022-
wantErr: false,
4023-
featuregates: []string{},
4032+
wantErr: false,
40244033
},
40254034
{
40264035
name: "collector present",
@@ -4776,7 +4785,7 @@ prometheus_cr:
47764785
opts: []config.Option{
47774786
config.WithCertManagerAvailability(certmanager.Available),
47784787
},
4779-
featuregates: []string{"operator.targetallocator.mtls"},
4788+
featuregates: []*colfeaturegate.Gate{featuregate.EnableTargetAllocatorMTLS},
47804789
},
47814790
}
47824791
for _, tt := range tests {
@@ -4795,13 +4804,18 @@ prometheus_cr:
47954804
TargetAllocator: tt.args.instance,
47964805
Collector: tt.args.collector,
47974806
}
4798-
if len(tt.featuregates) > 0 {
4799-
fg := strings.Join(tt.featuregates, ",")
4800-
flagset := featuregate.Flags(colfeaturegate.GlobalRegistry())
4801-
if err := flagset.Set(featuregate.FeatureGatesFlag, fg); err != nil {
4802-
t.Errorf("featuregate setting error = %v", err)
4807+
registry := colfeaturegate.GlobalRegistry()
4808+
for _, gate := range tt.featuregates {
4809+
current := gate.IsEnabled()
4810+
require.False(t, current, "only enable gates which are disabled by default")
4811+
if err := registry.Set(gate.ID(), true); err != nil {
4812+
require.NoError(t, err)
48034813
return
48044814
}
4815+
t.Cleanup(func() {
4816+
err := registry.Set(gate.ID(), current)
4817+
require.NoError(t, err)
4818+
})
48054819
}
48064820
got, err := BuildTargetAllocator(params)
48074821
if (err != nil) != tt.wantErr {

controllers/reconcile_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
routev1 "github.com/openshift/api/route/v1"
2323
"github.com/stretchr/testify/assert"
2424
"github.com/stretchr/testify/require"
25+
colfeaturegate "go.opentelemetry.io/collector/featuregate"
2526
appsv1 "k8s.io/api/apps/v1"
2627
autoscalingv2 "k8s.io/api/autoscaling/v2"
2728
v1 "k8s.io/api/core/v1"
@@ -48,6 +49,7 @@ import (
4849
"github.com/open-telemetry/opentelemetry-operator/internal/config"
4950
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
5051
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
52+
"github.com/open-telemetry/opentelemetry-operator/pkg/featuregate"
5153
)
5254

5355
const (
@@ -74,6 +76,18 @@ var (
7476
type check[T any] func(t *testing.T, params T)
7577

7678
func TestOpenTelemetryCollectorReconciler_Reconcile(t *testing.T) {
79+
// enable the collector CR feature flag, as these tests assume it
80+
// TODO: drop this after the flag is enabled by default
81+
registry := colfeaturegate.GlobalRegistry()
82+
current := featuregate.CollectorUsesTargetAllocatorCR.IsEnabled()
83+
require.False(t, current, "don't set gates which are enabled by default")
84+
err := registry.Set(featuregate.CollectorUsesTargetAllocatorCR.ID(), true)
85+
require.NoError(t, err)
86+
t.Cleanup(func() {
87+
err := registry.Set(featuregate.CollectorUsesTargetAllocatorCR.ID(), current)
88+
require.NoError(t, err)
89+
})
90+
7791
addedMetadataDeployment := testCollectorWithMode("test-deployment", v1alpha1.ModeDeployment)
7892
addedMetadataDeployment.Labels = map[string]string{
7993
labelName: labelVal,

0 commit comments

Comments
 (0)