job_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package test
  2. import (
  3. "log/slog"
  4. "os"
  5. "strconv"
  6. "testing"
  7. "github.com/ncarlier/webhookd/pkg/assert"
  8. "github.com/ncarlier/webhookd/pkg/hook"
  9. )
  10. func printJobMessages(job *hook.Job) {
  11. go func() {
  12. for {
  13. msg, open := <-job.MessageChan
  14. if !open {
  15. break
  16. }
  17. slog.Info(string(msg))
  18. }
  19. }()
  20. }
  21. func TestHookJob(t *testing.T) {
  22. req := &hook.Request{
  23. Name: "test_simple",
  24. Script: "../test/test_simple.sh",
  25. Method: "GET",
  26. Payload: "{\"foo\": \"bar\"}",
  27. Args: []string{
  28. "name=foo",
  29. "user_agent=test",
  30. },
  31. Timeout: 5,
  32. OutputDir: os.TempDir(),
  33. }
  34. job, err := hook.NewHookJob(req)
  35. assert.Nil(t, err, "")
  36. assert.NotNil(t, job, "")
  37. printJobMessages(job)
  38. err = job.Run()
  39. assert.Nil(t, err, "")
  40. assert.Equal(t, job.Status(), hook.Success, "")
  41. assert.Equal(t, job.Logs("notify:"), "OK\n", "")
  42. // Test that we can retrieve log file afterward
  43. id := strconv.FormatUint(job.ID(), 10)
  44. logFile, err := hook.GetLogFile(id, "test", os.TempDir())
  45. assert.Nil(t, err, "Log file should exists")
  46. defer logFile.Close()
  47. assert.NotNil(t, logFile, "Log file should be retrieve")
  48. }
  49. func TestWorkRunnerWithError(t *testing.T) {
  50. req := &hook.Request{
  51. Name: "test_error",
  52. Script: "../test/test_error.sh",
  53. Method: "POST",
  54. Payload: "",
  55. Args: []string{},
  56. Timeout: 5,
  57. OutputDir: os.TempDir(),
  58. }
  59. job, err := hook.NewHookJob(req)
  60. assert.Nil(t, err, "")
  61. assert.NotNil(t, job, "")
  62. printJobMessages(job)
  63. err = job.Run()
  64. assert.NotNil(t, err, "")
  65. assert.Equal(t, job.Status(), hook.Error, "")
  66. assert.Equal(t, "exit status 1", err.Error(), "")
  67. assert.Equal(t, 1, job.ExitCode(), "")
  68. }
  69. func TestWorkRunnerWithTimeout(t *testing.T) {
  70. req := &hook.Request{
  71. Name: "test_timeout",
  72. Script: "../test/test_timeout.sh",
  73. Method: "POST",
  74. Payload: "",
  75. Args: []string{},
  76. Timeout: 1,
  77. OutputDir: os.TempDir(),
  78. }
  79. job, err := hook.NewHookJob(req)
  80. assert.Nil(t, err, "")
  81. assert.NotNil(t, job, "")
  82. printJobMessages(job)
  83. err = job.Run()
  84. assert.NotNil(t, err, "")
  85. assert.Equal(t, job.Status(), hook.Error, "")
  86. assert.Equal(t, "signal: killed", err.Error(), "")
  87. }