workflow_test.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package test
  2. import (
  3. "git.sxidc.com/go-tools/argo-api"
  4. "git.sxidc.com/go-tools/argo-api/client"
  5. "github.com/pkg/errors"
  6. "gopkg.in/yaml.v3"
  7. "testing"
  8. "time"
  9. )
  10. func TestWorkflowBase(t *testing.T) {
  11. argo.Init(baseUrl, token, client.WithTimeoutSec(10))
  12. defer argo.Destroy()
  13. workflowDefinition := make(map[string]any)
  14. err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  15. if err != nil {
  16. panic(err)
  17. }
  18. err = argo.GetInstance().LintWorkflow(client.LintWorkflowParams{
  19. Namespace: namespace,
  20. WorkflowDefinition: workflowDefinition,
  21. })
  22. if err != nil {
  23. t.Fatalf("%+v\n", err)
  24. }
  25. workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  26. Namespace: namespace,
  27. WorkflowDefinition: workflowDefinition,
  28. })
  29. if err != nil {
  30. t.Fatalf("%+v\n", err)
  31. }
  32. defer func() {
  33. err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  34. Namespace: namespace,
  35. Name: workflowName,
  36. })
  37. if err != nil {
  38. t.Fatalf("%+v\n", err)
  39. }
  40. }()
  41. createdWorkflowDefinitions, err := argo.GetInstance().GetWorkflowsInNamespace(client.GetWorkflowsInNamespaceParams{
  42. Namespace: namespace,
  43. })
  44. if err != nil {
  45. t.Fatalf("%+v\n", err)
  46. }
  47. if len(createdWorkflowDefinitions) != 1 {
  48. t.Fatalf("%+v\n", errors.Errorf("数量不一致: %v", len(createdWorkflowDefinitions)))
  49. }
  50. createdWorkflowDefinition, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  51. Namespace: namespace,
  52. Name: workflowName,
  53. })
  54. if err != nil {
  55. t.Fatalf("%+v\n", err)
  56. }
  57. compareDefinitionMap(t, createdWorkflowDefinition, createdWorkflowDefinitions[0])
  58. compareDefinitionMap(t, createdWorkflowDefinitions[0], createdWorkflowDefinition)
  59. }
  60. func TestSubmitWorkflow(t *testing.T) {
  61. argo.Init(baseUrl, token, client.WithTimeoutSec(10))
  62. defer argo.Destroy()
  63. templateDefinition := make(map[string]any)
  64. err := yaml.Unmarshal(workflowTemplateWithParamsYamlStr, &templateDefinition)
  65. if err != nil {
  66. panic(err)
  67. }
  68. err = argo.GetInstance().CreateWorkflowTemplate(client.CreateWorkflowTemplateParams{
  69. Namespace: namespace,
  70. TemplateDefinition: templateDefinition,
  71. })
  72. if err != nil {
  73. t.Fatalf("%+v\n", err)
  74. }
  75. defer func() {
  76. err := argo.GetInstance().DeleteWorkflowTemplate(client.DeleteWorkflowTemplateParams{
  77. Namespace: namespace,
  78. Name: workflowTemplateWithParamsName,
  79. })
  80. if err != nil {
  81. t.Fatalf("%+v\n", err)
  82. }
  83. }()
  84. submitWorkflowName, err := argo.GetInstance().SubmitWorkflowFromWorkflowTemplate(client.SubmitWorkflowFromWorkflowTemplateParams{
  85. Namespace: namespace,
  86. TemplateName: workflowTemplateWithParamsName,
  87. Parameters: []string{"message=Hello Submit"},
  88. })
  89. if err != nil {
  90. t.Fatalf("%+v\n", err)
  91. }
  92. defer func() {
  93. err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  94. Namespace: namespace,
  95. Name: submitWorkflowName,
  96. })
  97. if err != nil {
  98. t.Fatalf("%+v\n", err)
  99. }
  100. }()
  101. submittedWorkflowDefinition, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  102. Namespace: namespace,
  103. Name: submitWorkflowName,
  104. })
  105. if err != nil {
  106. t.Fatalf("%+v\n", err)
  107. }
  108. specMap := submittedWorkflowDefinition["spec"].(map[string]any)
  109. argumentMap := specMap["arguments"].(map[string]any)
  110. parametersMap := argumentMap["parameters"].([]any)
  111. if parametersMap[0].(map[string]any)["name"] != "message" {
  112. t.Fatalf("%+v\n", errors.Errorf("参数名称错误: %v", parametersMap[0].(map[string]any)["name"]))
  113. }
  114. if parametersMap[0].(map[string]any)["value"] != "Hello Submit" {
  115. t.Fatalf("%+v\n", errors.Errorf("参数值错误: %v", parametersMap[0].(map[string]any)["value"]))
  116. }
  117. }
  118. func TestResubmitWorkflow(t *testing.T) {
  119. argo.Init(baseUrl, token, client.WithTimeoutSec(10))
  120. defer argo.Destroy()
  121. workflowDefinition := make(map[string]any)
  122. err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  123. if err != nil {
  124. panic(err)
  125. }
  126. workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  127. Namespace: namespace,
  128. WorkflowDefinition: workflowDefinition,
  129. })
  130. if err != nil {
  131. t.Fatalf("%+v\n", err)
  132. }
  133. defer func() {
  134. err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  135. Namespace: namespace,
  136. Name: workflowName,
  137. })
  138. if err != nil {
  139. t.Fatalf("%+v\n", err)
  140. }
  141. }()
  142. resubmittedWorkflowName, err := argo.GetInstance().ResubmitWorkflow(client.ResubmitWorkflowParams{
  143. Namespace: namespace,
  144. Name: workflowName,
  145. })
  146. if err != nil {
  147. t.Fatalf("%+v\n", err)
  148. }
  149. defer func() {
  150. err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  151. Namespace: namespace,
  152. Name: resubmittedWorkflowName,
  153. })
  154. if err != nil {
  155. t.Fatalf("%+v\n", err)
  156. }
  157. }()
  158. }
  159. func TestRetryWorkflow(t *testing.T) {
  160. argo.Init(baseUrl, token, client.WithTimeoutSec(10))
  161. defer argo.Destroy()
  162. workflowDefinition := make(map[string]any)
  163. err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  164. if err != nil {
  165. panic(err)
  166. }
  167. workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  168. Namespace: namespace,
  169. WorkflowDefinition: workflowDefinition,
  170. })
  171. if err != nil {
  172. t.Fatalf("%+v\n", err)
  173. }
  174. defer func() {
  175. err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  176. Namespace: namespace,
  177. Name: workflowName,
  178. })
  179. if err != nil {
  180. t.Fatalf("%+v\n", err)
  181. }
  182. }()
  183. err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
  184. Namespace: namespace,
  185. Name: workflowName,
  186. })
  187. if err != nil {
  188. t.Fatalf("%+v\n", err)
  189. }
  190. for {
  191. currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  192. Namespace: namespace,
  193. Name: workflowName,
  194. })
  195. if err != nil {
  196. t.Fatalf("%+v\n", err)
  197. }
  198. if currentWorkflowDefinitions["status"].(map[string]any)["phase"] != "Running" {
  199. break
  200. }
  201. time.Sleep(1 * time.Second)
  202. }
  203. err = argo.GetInstance().RetryWorkflow(client.RetryWorkflowParams{
  204. Namespace: namespace,
  205. Name: workflowName,
  206. })
  207. if err != nil {
  208. t.Fatalf("%+v\n", err)
  209. }
  210. }