|
|
@@ -5,6 +5,7 @@ import (
|
|
|
"git.sxidc.com/go-tools/argo-api/client"
|
|
|
"github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
|
|
|
"github.com/pkg/errors"
|
|
|
+ "sync"
|
|
|
"testing"
|
|
|
"time"
|
|
|
)
|
|
|
@@ -204,28 +205,40 @@ func TestRetryWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
|
|
|
+ terminalCalled := false
|
|
|
+ wg := sync.WaitGroup{}
|
|
|
+ wg.Add(1)
|
|
|
+
|
|
|
+ token, err := argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
+ }, func(wf *v1alpha1.Workflow) {
|
|
|
+ if terminalCalled {
|
|
|
+ if wf.Status.Phase == "Running" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ wg.Done()
|
|
|
+ }
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
- err = argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
+ defer token.Done()
|
|
|
+
|
|
|
+ err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
- }, func(doneToken *client.WatchWorkflowDoneToken, wf *v1alpha1.Workflow) {
|
|
|
- if wf.Status.Phase == "Running" {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- doneToken.Done()
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
+ terminalCalled = true
|
|
|
+
|
|
|
+ wg.Wait()
|
|
|
+
|
|
|
err = argo.GetInstance().RetryWorkflow(client.RetryWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
@@ -261,27 +274,39 @@ func TestStopWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- err = argo.GetInstance().StopWorkflow(client.StopWorkflowParams{
|
|
|
+ stopCalled := false
|
|
|
+ wg := sync.WaitGroup{}
|
|
|
+ wg.Add(1)
|
|
|
+
|
|
|
+ token, err := argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
+ }, func(wf *v1alpha1.Workflow) {
|
|
|
+ if stopCalled {
|
|
|
+ if wf.Status.Phase == "Running" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ wg.Done()
|
|
|
+ }
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
- err = argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
+ defer token.Done()
|
|
|
+
|
|
|
+ err = argo.GetInstance().StopWorkflow(client.StopWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
- }, func(doneToken *client.WatchWorkflowDoneToken, wf *v1alpha1.Workflow) {
|
|
|
- if wf.Status.Phase == "Running" {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- doneToken.Done()
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
+
|
|
|
+ stopCalled = true
|
|
|
+
|
|
|
+ wg.Wait()
|
|
|
}
|
|
|
|
|
|
func TestTerminateWorkflow(t *testing.T) {
|
|
|
@@ -310,27 +335,39 @@ func TestTerminateWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
|
|
|
+ terminalCalled := false
|
|
|
+ wg := sync.WaitGroup{}
|
|
|
+ wg.Add(1)
|
|
|
+
|
|
|
+ token, err := argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
+ }, func(wf *v1alpha1.Workflow) {
|
|
|
+ if terminalCalled {
|
|
|
+ if wf.Status.Phase == "Running" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ wg.Done()
|
|
|
+ }
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
- err = argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
+ defer token.Done()
|
|
|
+
|
|
|
+ err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
- }, func(doneToken *client.WatchWorkflowDoneToken, wf *v1alpha1.Workflow) {
|
|
|
- if wf.Status.Phase == "Running" {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- doneToken.Done()
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
+
|
|
|
+ terminalCalled = true
|
|
|
+
|
|
|
+ wg.Wait()
|
|
|
}
|
|
|
|
|
|
func TestSetWorkflow(t *testing.T) {
|
|
|
@@ -359,10 +396,15 @@ func TestSetWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- err = argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
- Namespace: namespace,
|
|
|
- Name: workflowName,
|
|
|
- }, func(doneToken *client.WatchWorkflowDoneToken, wf *v1alpha1.Workflow) {
|
|
|
+ for {
|
|
|
+ wf, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
|
|
|
+ Namespace: namespace,
|
|
|
+ Name: workflowName,
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
findA := false
|
|
|
for _, node := range wf.Status.Nodes {
|
|
|
if node.DisplayName == "A" {
|
|
|
@@ -370,14 +412,9 @@ func TestSetWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if !findA {
|
|
|
- return
|
|
|
+ if findA {
|
|
|
+ break
|
|
|
}
|
|
|
-
|
|
|
- doneToken.Done()
|
|
|
- })
|
|
|
- if err != nil {
|
|
|
- t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
err = argo.GetInstance().SetWorkflow(client.SetWorkflowParams{
|
|
|
@@ -437,32 +474,45 @@ func TestSuspendAndResumeWorkflow(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- err = argo.GetInstance().SuspendWorkflow(client.SuspendWorkflowParams{
|
|
|
+ suspendCalled := false
|
|
|
+
|
|
|
+ wg1 := sync.WaitGroup{}
|
|
|
+ wg1.Add(1)
|
|
|
+
|
|
|
+ token, err := argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
+ }, func(wf *v1alpha1.Workflow) {
|
|
|
+ if suspendCalled {
|
|
|
+ if wf.Status.Phase != "Running" {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if wf.Spec.Suspend == nil || *wf.Spec.Suspend != true {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ wg1.Done()
|
|
|
+ }
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
- err = argo.GetInstance().WatchWorkflow(client.WatchWorkflowParams{
|
|
|
+ defer token.Done()
|
|
|
+
|
|
|
+ err = argo.GetInstance().SuspendWorkflow(client.SuspendWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
- }, func(doneToken *client.WatchWorkflowDoneToken, wf *v1alpha1.Workflow) {
|
|
|
- if wf.Status.Phase != "Running" {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if wf.Spec.Suspend == nil || *wf.Spec.Suspend != true {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- doneToken.Done()
|
|
|
})
|
|
|
if err != nil {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
+ suspendCalled = true
|
|
|
+
|
|
|
+ wg1.Wait()
|
|
|
+
|
|
|
err = argo.GetInstance().ResumeWorkflow(client.ResumeWorkflowParams{
|
|
|
Namespace: namespace,
|
|
|
Name: workflowName,
|
|
|
@@ -471,6 +521,7 @@ func TestSuspendAndResumeWorkflow(t *testing.T) {
|
|
|
t.Fatalf("%+v\n", err)
|
|
|
}
|
|
|
|
|
|
+ // resume后不会推送消息
|
|
|
for {
|
|
|
wf, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
|
|
|
Namespace: namespace,
|