@@ -19,8 +19,11 @@ package executor
19
19
import (
20
20
"context"
21
21
"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"
22
26
"math"
23
- "testing"
24
27
"time"
25
28
26
29
"cuelang.org/go/cue/cuecontext"
@@ -33,16 +36,13 @@ import (
33
36
kerrors "k8s.io/apimachinery/pkg/api/errors"
34
37
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
35
38
"k8s.io/apimachinery/pkg/runtime"
36
- utilfeature "k8s.io/apiserver/pkg/util/feature"
37
- featuregatetesting "k8s.io/component-base/featuregate/testing"
38
39
"k8s.io/utils/ptr"
39
40
"sigs.k8s.io/yaml"
40
41
41
42
monitorContext "github.com/kubevela/pkg/monitor/context"
42
43
"github.com/kubevela/workflow/api/v1alpha1"
43
44
wfContext "github.com/kubevela/workflow/pkg/context"
44
45
"github.com/kubevela/workflow/pkg/cue/process"
45
- "github.com/kubevela/workflow/pkg/features"
46
46
"github.com/kubevela/workflow/pkg/providers"
47
47
"github.com/kubevela/workflow/pkg/tasks/builtin"
48
48
"github.com/kubevela/workflow/pkg/tasks/custom"
@@ -895,7 +895,8 @@ var _ = Describe("Test Workflow", func() {
895
895
896
896
It ("Workflow test for failed after retries with suspend" , func () {
897
897
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 ()
899
900
instance , runners := makeTestCase ([]v1alpha1.WorkflowStep {
900
901
{
901
902
WorkflowStepBase : v1alpha1.WorkflowStepBase {
@@ -1469,7 +1470,8 @@ var _ = Describe("Test Workflow", func() {
1469
1470
1470
1471
It ("Test failed after retries with sub steps" , func () {
1471
1472
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 ()
1473
1475
instance , runners := makeTestCase ([]v1alpha1.WorkflowStep {
1474
1476
{
1475
1477
WorkflowStepBase : v1alpha1.WorkflowStepBase {
@@ -2441,6 +2443,30 @@ func cleanStepTimeStamp(wfStatus *v1alpha1.WorkflowRunStatus) {
2441
2443
}
2442
2444
}
2443
2445
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
+
2444
2470
const cmYaml = `apiVersion: v1
2445
2471
data:
2446
2472
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