Skip to content

Commit 01c04a6

Browse files
committed
Chore: Refactor feature gate handling in workflow tests
1 parent 1656c33 commit 01c04a6

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

pkg/executor/workflow_test.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ package executor
1919
import (
2020
"context"
2121
"encoding/json"
22+
"fmt"
23+
"github.com/kubevela/workflow/pkg/features"
24+
utilfeature "k8s.io/apiserver/pkg/util/feature"
25+
"k8s.io/component-base/featuregate"
2226
"math"
23-
"testing"
2427
"time"
2528

2629
"cuelang.org/go/cue/cuecontext"
@@ -33,16 +36,13 @@ import (
3336
kerrors "k8s.io/apimachinery/pkg/api/errors"
3437
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3538
"k8s.io/apimachinery/pkg/runtime"
36-
utilfeature "k8s.io/apiserver/pkg/util/feature"
37-
featuregatetesting "k8s.io/component-base/featuregate/testing"
3839
"k8s.io/utils/ptr"
3940
"sigs.k8s.io/yaml"
4041

4142
monitorContext "github.com/kubevela/pkg/monitor/context"
4243
"github.com/kubevela/workflow/api/v1alpha1"
4344
wfContext "github.com/kubevela/workflow/pkg/context"
4445
"github.com/kubevela/workflow/pkg/cue/process"
45-
"github.com/kubevela/workflow/pkg/features"
4646
"github.com/kubevela/workflow/pkg/providers"
4747
"github.com/kubevela/workflow/pkg/tasks/builtin"
4848
"github.com/kubevela/workflow/pkg/tasks/custom"
@@ -895,7 +895,8 @@ var _ = Describe("Test Workflow", func() {
895895

896896
It("Workflow test for failed after retries with suspend", func() {
897897
By("Test failed-after-retries in StepByStep mode with suspend")
898-
defer featuregatetesting.SetFeatureGateDuringTest(&testing.T{}, utilfeature.DefaultFeatureGate, features.EnableSuspendOnFailure, true)
898+
cleanup := setFeatureGateForTest(utilfeature.DefaultFeatureGate, features.EnableSuspendOnFailure, true)
899+
defer cleanup()
899900
instance, runners := makeTestCase([]v1alpha1.WorkflowStep{
900901
{
901902
WorkflowStepBase: v1alpha1.WorkflowStepBase{
@@ -1469,7 +1470,8 @@ var _ = Describe("Test Workflow", func() {
14691470

14701471
It("Test failed after retries with sub steps", func() {
14711472
By("Test failed-after-retries with step group in StepByStep mode")
1472-
defer featuregatetesting.SetFeatureGateDuringTest(&testing.T{}, utilfeature.DefaultFeatureGate, features.EnableSuspendOnFailure, true)
1473+
cleanup := setFeatureGateForTest(utilfeature.DefaultFeatureGate, features.EnableSuspendOnFailure, true)
1474+
defer cleanup()
14731475
instance, runners := makeTestCase([]v1alpha1.WorkflowStep{
14741476
{
14751477
WorkflowStepBase: v1alpha1.WorkflowStepBase{
@@ -2441,6 +2443,30 @@ func cleanStepTimeStamp(wfStatus *v1alpha1.WorkflowRunStatus) {
24412443
}
24422444
}
24432445

2446+
func setFeatureGateForTest(gate featuregate.FeatureGate, f featuregate.Feature, value bool) func() {
2447+
// The Kubernetes feature gate interface requires a MutableVersionedFeatureGate for setting/resetting.
2448+
mutableGate, ok := gate.(featuregate.MutableVersionedFeatureGate)
2449+
Expect(ok).To(BeTrue(), "The provided feature gate must be a MutableVersionedFeatureGate to be modified in tests")
2450+
2451+
originalValue := mutableGate.Enabled(f)
2452+
originalExplicitlySet := mutableGate.ExplicitlySet(f)
2453+
2454+
// Set the desired value for the test.
2455+
err := mutableGate.Set(fmt.Sprintf("%s=%v", f, value))
2456+
Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to set feature gate %q to %v: %v", f, value, err))
2457+
2458+
// Return a cleanup function to restore the original state.
2459+
return func() {
2460+
if originalExplicitlySet {
2461+
err := mutableGate.Set(fmt.Sprintf("%s=%v", f, originalValue))
2462+
Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to restore feature gate %q to original value %v: %v", f, originalValue, err))
2463+
} else {
2464+
err := mutableGate.ResetFeatureValueToDefault(f)
2465+
Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to reset feature gate %q to default: %v", f, err))
2466+
}
2467+
}
2468+
}
2469+
24442470
const cmYaml = `apiVersion: v1
24452471
data:
24462472
components: '{"server":"{\"Scopes\":null,\"StandardWorkload\":\"{\\\"apiVersion\\\":\\\"v1\\\",\\\"kind\\\":\\\"Pod\\\",\\\"metadata\\\":{\\\"labels\\\":{\\\"app\\\":\\\"nginx\\\"}},\\\"spec\\\":{\\\"containers\\\":[{\\\"env\\\":[{\\\"name\\\":\\\"APP\\\",\\\"value\\\":\\\"nginx\\\"}],\\\"image\\\":\\\"nginx:1.14.2\\\",\\\"imagePullPolicy\\\":\\\"IfNotPresent\\\",\\\"name\\\":\\\"main\\\",\\\"ports\\\":[{\\\"containerPort\\\":8080,\\\"protocol\\\":\\\"TCP\\\"}]}]}}\",\"Traits\":[\"{\\\"apiVersion\\\":\\\"v1\\\",\\\"kind\\\":\\\"Service\\\",\\\"metadata\\\":{\\\"name\\\":\\\"my-service\\\"},\\\"spec\\\":{\\\"ports\\\":[{\\\"port\\\":80,\\\"protocol\\\":\\\"TCP\\\",\\\"targetPort\\\":8080}],\\\"selector\\\":{\\\"app\\\":\\\"nginx\\\"}}}\"]}"}'

0 commit comments

Comments
 (0)