webhookd/pkg/hook/test/job_test.go
2022-05-26 10:05:53 +02:00

97 lines
2.1 KiB
Go

package test
import (
"os"
"strconv"
"testing"
"github.com/ncarlier/webhookd/pkg/assert"
"github.com/ncarlier/webhookd/pkg/hook"
"github.com/ncarlier/webhookd/pkg/logger"
)
func printJobMessages(job *hook.Job) {
go func() {
for {
msg, open := <-job.MessageChan
if !open {
break
}
logger.Info.Println(string(msg))
}
}()
}
func TestHookJob(t *testing.T) {
logger.Init("debug", "out")
req := &hook.Request{
Name: "test_simple",
Method: "GET",
Payload: "{\"foo\": \"bar\"}",
Args: []string{
"name=foo",
"user_agent=test",
},
Timeout: 5,
BaseDir: "../test",
OutputDir: os.TempDir(),
}
job, err := hook.NewHookJob(req)
assert.Nil(t, err, "")
assert.NotNil(t, job, "")
printJobMessages(job)
err = job.Run()
assert.Nil(t, err, "")
assert.Equal(t, job.Status(), hook.Success, "")
assert.Equal(t, job.Logs("notify:"), "OK\n", "")
// Test that we can retrieve log file afterward
id := strconv.FormatUint(job.ID(), 10)
logFile, err := hook.Logs(id, "test", os.TempDir())
assert.Nil(t, err, "Log file should exists")
defer logFile.Close()
assert.NotNil(t, logFile, "Log file should be retrieve")
}
func TestWorkRunnerWithError(t *testing.T) {
logger.Init("debug")
req := &hook.Request{
Name: "test_error",
Method: "POST",
Payload: "",
Args: []string{},
Timeout: 5,
BaseDir: "../test",
OutputDir: os.TempDir(),
}
job, err := hook.NewHookJob(req)
assert.Nil(t, err, "")
assert.NotNil(t, job, "")
printJobMessages(job)
err = job.Run()
assert.NotNil(t, err, "")
assert.Equal(t, job.Status(), hook.Error, "")
assert.Equal(t, "exit status 1", err.Error(), "")
}
func TestWorkRunnerWithTimeout(t *testing.T) {
logger.Init("debug")
req := &hook.Request{
Name: "test_timeout",
Method: "POST",
Payload: "",
Args: []string{},
Timeout: 1,
BaseDir: "../test",
OutputDir: os.TempDir(),
}
job, err := hook.NewHookJob(req)
assert.Nil(t, err, "")
assert.NotNil(t, job, "")
printJobMessages(job)
err = job.Run()
assert.NotNil(t, err, "")
assert.Equal(t, job.Status(), hook.Error, "")
assert.Equal(t, "signal: killed", err.Error(), "")
}