workflow_test.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. package test
  2. //
  3. //func TestWorkflowBase(t *testing.T) {
  4. // err := argo.Init(kubeConfig)
  5. // if err != nil {
  6. // t.Fatalf("%+v\n", err)
  7. // }
  8. //
  9. // defer argo.Destroy()
  10. //
  11. // workflowDefinition := make(map[string]any)
  12. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  13. // if err != nil {
  14. // t.Fatalf("%+v\n", err)
  15. // }
  16. //
  17. // err = argo.GetInstance().LintWorkflow(client.LintWorkflowParams{
  18. // Namespace: namespace,
  19. // WorkflowDefinition: workflowDefinition,
  20. // })
  21. // if err != nil {
  22. // t.Fatalf("%+v\n", err)
  23. // }
  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. //
  33. // defer func() {
  34. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  35. // Namespace: namespace,
  36. // Name: workflowName,
  37. // })
  38. // if err != nil {
  39. // t.Fatalf("%+v\n", err)
  40. // }
  41. // }()
  42. //
  43. // createdWorkflowDefinitions, err := argo.GetInstance().GetWorkflowsInNamespace(client.GetWorkflowsInNamespaceParams{
  44. // Namespace: namespace,
  45. // })
  46. // if err != nil {
  47. // t.Fatalf("%+v\n", err)
  48. // }
  49. //
  50. // if len(createdWorkflowDefinitions) != 1 {
  51. // t.Fatalf("%+v\n", errors.Errorf("数量不一致: %v", len(createdWorkflowDefinitions)))
  52. // }
  53. //
  54. // createdWorkflowDefinition, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  55. // Namespace: namespace,
  56. // Name: workflowName,
  57. // })
  58. // if err != nil {
  59. // t.Fatalf("%+v\n", err)
  60. // }
  61. //
  62. // compareDefinitionMap(t, createdWorkflowDefinition, createdWorkflowDefinitions[0])
  63. // compareDefinitionMap(t, createdWorkflowDefinitions[0], createdWorkflowDefinition)
  64. //}
  65. //
  66. //func TestSubmitWorkflow(t *testing.T) {
  67. // err := argo.Init(kubeConfig)
  68. // if err != nil {
  69. // t.Fatalf("%+v\n", err)
  70. // }
  71. //
  72. // defer argo.Destroy()
  73. //
  74. // templateDefinition := make(map[string]any)
  75. // err := yaml.Unmarshal(workflowTemplateWithParamsYamlStr, &templateDefinition)
  76. // if err != nil {
  77. // panic(err)
  78. // }
  79. //
  80. // err = argo.GetInstance().CreateWorkflowTemplate(client.CreateWorkflowTemplateParams{
  81. // Namespace: namespace,
  82. // TemplateDefinition: templateDefinition,
  83. // })
  84. // if err != nil {
  85. // t.Fatalf("%+v\n", err)
  86. // }
  87. //
  88. // defer func() {
  89. // err := argo.GetInstance().DeleteWorkflowTemplate(client.DeleteWorkflowTemplateParams{
  90. // Namespace: namespace,
  91. // Name: workflowTemplateWithParamsName,
  92. // })
  93. // if err != nil {
  94. // t.Fatalf("%+v\n", err)
  95. // }
  96. // }()
  97. //
  98. // submitWorkflowName, err := argo.GetInstance().SubmitWorkflowFromWorkflowTemplate(client.SubmitWorkflowFromWorkflowTemplateParams{
  99. // Namespace: namespace,
  100. // TemplateName: workflowTemplateWithParamsName,
  101. // Parameters: []string{"message=Hello Submit"},
  102. // })
  103. // if err != nil {
  104. // t.Fatalf("%+v\n", err)
  105. // }
  106. //
  107. // defer func() {
  108. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  109. // Namespace: namespace,
  110. // Name: submitWorkflowName,
  111. // })
  112. // if err != nil {
  113. // t.Fatalf("%+v\n", err)
  114. // }
  115. // }()
  116. //
  117. // submittedWorkflowDefinition, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  118. // Namespace: namespace,
  119. // Name: submitWorkflowName,
  120. // })
  121. // if err != nil {
  122. // t.Fatalf("%+v\n", err)
  123. // }
  124. //
  125. // specMap := submittedWorkflowDefinition["spec"].(map[string]any)
  126. // argumentMap := specMap["arguments"].(map[string]any)
  127. // parametersMap := argumentMap["parameters"].([]any)
  128. //
  129. // if parametersMap[0].(map[string]any)["name"] != "message" {
  130. // t.Fatalf("%+v\n", errors.Errorf("参数名称错误: %v", parametersMap[0].(map[string]any)["name"]))
  131. // }
  132. //
  133. // if parametersMap[0].(map[string]any)["value"] != "Hello Submit" {
  134. // t.Fatalf("%+v\n", errors.Errorf("参数值错误: %v", parametersMap[0].(map[string]any)["value"]))
  135. // }
  136. //}
  137. //
  138. //func TestResubmitWorkflow(t *testing.T) {
  139. // err := argo.Init(kubeConfig)
  140. // if err != nil {
  141. // t.Fatalf("%+v\n", err)
  142. // }
  143. //
  144. // defer argo.Destroy()
  145. //
  146. // workflowDefinition := make(map[string]any)
  147. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  148. // if err != nil {
  149. // panic(err)
  150. // }
  151. //
  152. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  153. // Namespace: namespace,
  154. // WorkflowDefinition: workflowDefinition,
  155. // })
  156. // if err != nil {
  157. // t.Fatalf("%+v\n", err)
  158. // }
  159. //
  160. // defer func() {
  161. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  162. // Namespace: namespace,
  163. // Name: workflowName,
  164. // })
  165. // if err != nil {
  166. // t.Fatalf("%+v\n", err)
  167. // }
  168. // }()
  169. //
  170. // resubmittedWorkflowName, err := argo.GetInstance().ResubmitWorkflow(client.ResubmitWorkflowParams{
  171. // Namespace: namespace,
  172. // Name: workflowName,
  173. // })
  174. // if err != nil {
  175. // t.Fatalf("%+v\n", err)
  176. // }
  177. //
  178. // defer func() {
  179. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  180. // Namespace: namespace,
  181. // Name: resubmittedWorkflowName,
  182. // })
  183. // if err != nil {
  184. // t.Fatalf("%+v\n", err)
  185. // }
  186. // }()
  187. //}
  188. //
  189. //func TestRetryWorkflow(t *testing.T) {
  190. // err := argo.Init(kubeConfig)
  191. // if err != nil {
  192. // t.Fatalf("%+v\n", err)
  193. // }
  194. //
  195. // defer argo.Destroy()
  196. //
  197. // workflowDefinition := make(map[string]any)
  198. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  199. // if err != nil {
  200. // panic(err)
  201. // }
  202. //
  203. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  204. // Namespace: namespace,
  205. // WorkflowDefinition: workflowDefinition,
  206. // })
  207. // if err != nil {
  208. // t.Fatalf("%+v\n", err)
  209. // }
  210. //
  211. // defer func() {
  212. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  213. // Namespace: namespace,
  214. // Name: workflowName,
  215. // })
  216. // if err != nil {
  217. // t.Fatalf("%+v\n", err)
  218. // }
  219. // }()
  220. //
  221. // err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
  222. // Namespace: namespace,
  223. // Name: workflowName,
  224. // })
  225. // if err != nil {
  226. // t.Fatalf("%+v\n", err)
  227. // }
  228. //
  229. // for {
  230. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  231. // Namespace: namespace,
  232. // Name: workflowName,
  233. // })
  234. // if err != nil {
  235. // t.Fatalf("%+v\n", err)
  236. // }
  237. //
  238. // if currentWorkflowDefinitions["status"].(map[string]any)["phase"] != "Running" {
  239. // break
  240. // }
  241. //
  242. // time.Sleep(1 * time.Second)
  243. // }
  244. //
  245. // err = argo.GetInstance().RetryWorkflow(client.RetryWorkflowParams{
  246. // Namespace: namespace,
  247. // Name: workflowName,
  248. // })
  249. // if err != nil {
  250. // t.Fatalf("%+v\n", err)
  251. // }
  252. //}
  253. //
  254. //func TestStopWorkflow(t *testing.T) {
  255. // err := argo.Init(kubeConfig)
  256. // if err != nil {
  257. // t.Fatalf("%+v\n", err)
  258. // }
  259. //
  260. // defer argo.Destroy()
  261. //
  262. // workflowDefinition := make(map[string]any)
  263. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  264. // if err != nil {
  265. // panic(err)
  266. // }
  267. //
  268. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  269. // Namespace: namespace,
  270. // WorkflowDefinition: workflowDefinition,
  271. // })
  272. // if err != nil {
  273. // t.Fatalf("%+v\n", err)
  274. // }
  275. //
  276. // defer func() {
  277. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  278. // Namespace: namespace,
  279. // Name: workflowName,
  280. // })
  281. // if err != nil {
  282. // t.Fatalf("%+v\n", err)
  283. // }
  284. // }()
  285. //
  286. // err = argo.GetInstance().StopWorkflow(client.StopWorkflowParams{
  287. // Namespace: namespace,
  288. // Name: workflowName,
  289. // })
  290. // if err != nil {
  291. // t.Fatalf("%+v\n", err)
  292. // }
  293. //
  294. // for {
  295. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  296. // Namespace: namespace,
  297. // Name: workflowName,
  298. // })
  299. // if err != nil {
  300. // t.Fatalf("%+v\n", err)
  301. // }
  302. //
  303. // if currentWorkflowDefinitions["status"].(map[string]any)["phase"] != "Running" {
  304. // break
  305. // }
  306. //
  307. // time.Sleep(1 * time.Second)
  308. // }
  309. //}
  310. //
  311. //func TestTerminateWorkflow(t *testing.T) {
  312. // err := argo.Init(kubeConfig)
  313. // if err != nil {
  314. // t.Fatalf("%+v\n", err)
  315. // }
  316. //
  317. // defer argo.Destroy()
  318. //
  319. // workflowDefinition := make(map[string]any)
  320. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  321. // if err != nil {
  322. // panic(err)
  323. // }
  324. //
  325. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  326. // Namespace: namespace,
  327. // WorkflowDefinition: workflowDefinition,
  328. // })
  329. // if err != nil {
  330. // t.Fatalf("%+v\n", err)
  331. // }
  332. //
  333. // defer func() {
  334. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  335. // Namespace: namespace,
  336. // Name: workflowName,
  337. // })
  338. // if err != nil {
  339. // t.Fatalf("%+v\n", err)
  340. // }
  341. // }()
  342. //
  343. // err = argo.GetInstance().TerminateWorkflow(client.TerminateWorkflowParams{
  344. // Namespace: namespace,
  345. // Name: workflowName,
  346. // })
  347. // if err != nil {
  348. // t.Fatalf("%+v\n", err)
  349. // }
  350. //
  351. // for {
  352. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  353. // Namespace: namespace,
  354. // Name: workflowName,
  355. // })
  356. // if err != nil {
  357. // t.Fatalf("%+v\n", err)
  358. // }
  359. //
  360. // if currentWorkflowDefinitions["status"].(map[string]any)["phase"] != "Running" {
  361. // break
  362. // }
  363. //
  364. // time.Sleep(1 * time.Second)
  365. // }
  366. //}
  367. //
  368. //func TestSetWorkflow(t *testing.T) {
  369. // err := argo.Init(kubeConfig)
  370. // if err != nil {
  371. // t.Fatalf("%+v\n", err)
  372. // }
  373. //
  374. // defer argo.Destroy()
  375. //
  376. // workflowDefinition := make(map[string]any)
  377. // err := yaml.Unmarshal(workflowYamlStr, &workflowDefinition)
  378. // if err != nil {
  379. // panic(err)
  380. // }
  381. //
  382. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  383. // Namespace: namespace,
  384. // WorkflowDefinition: workflowDefinition,
  385. // })
  386. // if err != nil {
  387. // t.Fatalf("%+v\n", err)
  388. // }
  389. //
  390. // defer func() {
  391. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  392. // Namespace: namespace,
  393. // Name: workflowName,
  394. // })
  395. // if err != nil {
  396. // t.Fatalf("%+v\n", err)
  397. // }
  398. // }()
  399. //
  400. // for {
  401. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  402. // Namespace: namespace,
  403. // Name: workflowName,
  404. // })
  405. // if err != nil {
  406. // t.Fatalf("%+v\n", err)
  407. // }
  408. //
  409. // nodes, ok := currentWorkflowDefinitions["status"].(map[string]any)["nodes"]
  410. // if !ok {
  411. // time.Sleep(1 * time.Second)
  412. // continue
  413. // }
  414. //
  415. // findA := false
  416. // nodesMap := nodes.(map[string]any)
  417. // for _, node := range nodesMap {
  418. // nodeMap := node.(map[string]any)
  419. // if nodeMap["displayName"].(string) == "A" {
  420. // findA = true
  421. // }
  422. // }
  423. //
  424. // if findA {
  425. // break
  426. // }
  427. //
  428. // time.Sleep(1 * time.Second)
  429. // }
  430. //
  431. // err = argo.GetInstance().SetWorkflow(client.SetWorkflowParams{
  432. // Namespace: namespace,
  433. // Name: workflowName,
  434. // NodeFieldSelector: "displayName=A",
  435. // OutputParameters: `{"approve": "pass"}`,
  436. // })
  437. // if err != nil {
  438. // t.Fatalf("%+v\n", err)
  439. // }
  440. //
  441. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  442. // Namespace: namespace,
  443. // Name: workflowName,
  444. // })
  445. // if err != nil {
  446. // t.Fatalf("%+v\n", err)
  447. // }
  448. //
  449. // nodesMap := currentWorkflowDefinitions["status"].(map[string]any)["nodes"].(map[string]any)
  450. // for _, node := range nodesMap {
  451. // nodeMap := node.(map[string]any)
  452. // if nodeMap["displayName"].(string) == "A" {
  453. // outputParams := nodeMap["outputs"].(map[string]any)["parameters"].([]any)
  454. // approveParamsMap := outputParams[0].(map[string]any)
  455. // if approveParamsMap["name"] == "approve" && approveParamsMap["value"] == "pass" {
  456. // return
  457. // }
  458. //
  459. // t.Fatalf("%+v\n", errors.Errorf("输出参数不正确: %v", approveParamsMap["value"]))
  460. // }
  461. // }
  462. //
  463. // t.Fatalf("%+v\n", errors.New("找不到对应的节点"))
  464. //}
  465. //
  466. //func TestSuspendAndResumeWorkflow(t *testing.T) {
  467. // err := argo.Init(kubeConfig)
  468. // if err != nil {
  469. // t.Fatalf("%+v\n", err)
  470. // }
  471. //
  472. // defer argo.Destroy()
  473. //
  474. // workflowDefinition := make(map[string]any)
  475. // err := yaml.Unmarshal(workflowWithParamsYamlStr, &workflowDefinition)
  476. // if err != nil {
  477. // panic(err)
  478. // }
  479. //
  480. // workflowName, err := argo.GetInstance().CreateWorkflow(client.CreateWorkflowParams{
  481. // Namespace: namespace,
  482. // WorkflowDefinition: workflowDefinition,
  483. // })
  484. // if err != nil {
  485. // t.Fatalf("%+v\n", err)
  486. // }
  487. //
  488. // defer func() {
  489. // err := argo.GetInstance().DeleteWorkflow(client.DeleteWorkflowParams{
  490. // Namespace: namespace,
  491. // Name: workflowName,
  492. // })
  493. // if err != nil {
  494. // t.Fatalf("%+v\n", err)
  495. // }
  496. // }()
  497. //
  498. // err = argo.GetInstance().SuspendWorkflow(client.SuspendWorkflowParams{
  499. // Namespace: namespace,
  500. // Name: workflowName,
  501. // })
  502. // if err != nil {
  503. // t.Fatalf("%+v\n", err)
  504. // }
  505. //
  506. // for {
  507. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  508. // Namespace: namespace,
  509. // Name: workflowName,
  510. // })
  511. // if err != nil {
  512. // t.Fatalf("%+v\n", err)
  513. // }
  514. //
  515. // if currentWorkflowDefinitions["spec"].(map[string]any)["suspend"] == true {
  516. // break
  517. // }
  518. //
  519. // time.Sleep(1 * time.Second)
  520. // }
  521. //
  522. // err = argo.GetInstance().ResumeWorkflow(client.ResumeWorkflowParams{
  523. // Namespace: namespace,
  524. // Name: workflowName,
  525. // })
  526. // if err != nil {
  527. // t.Fatalf("%+v\n", err)
  528. // }
  529. //
  530. // for {
  531. // currentWorkflowDefinitions, err := argo.GetInstance().GetWorkflow(client.GetWorkflowParams{
  532. // Namespace: namespace,
  533. // Name: workflowName,
  534. // })
  535. // if err != nil {
  536. // t.Fatalf("%+v\n", err)
  537. // }
  538. //
  539. // _, ok := currentWorkflowDefinitions["spec"].(map[string]any)["suspend"]
  540. // if !ok {
  541. // break
  542. // }
  543. //
  544. // time.Sleep(1 * time.Second)
  545. // }
  546. //}