diff --git a/Taskfile.yml b/Taskfile.yml index b7313f4d13319627727838e8df5302c52eefc042..1c9a46effeb030aca31e4a26e5efd6dd1bb82d5f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -17,6 +17,8 @@ tasks: test: desc: Execute unit tests in Go. + env: + TEST_BY_TASK: true cmds: - echo "Execute unit tests in Go." - go test -cover -v ./... @@ -25,6 +27,8 @@ tasks: test-fuzz: desc: Conduct fuzzing tests.# + env: + TEST_BY_TASK: true cmds: - echo "Conduct fuzzing tests." - go test -v -fuzztime=30s -fuzz=Fuzz ./... diff --git a/devenv.nix b/devenv.nix index 4a6a2525c3cb66b28cf658f2c310ee1c12ab377d..9c0b1eb81a0f3cd9c3ac85a057ac5ac581411f9f 100644 --- a/devenv.nix +++ b/devenv.nix @@ -133,8 +133,6 @@ EOF #set -euo pipefail set -x - export TEST_BY_TASK=true - PATH="''${PATH}":${pkgs.coreutils}/bin PATH="''${PATH}":${pkgs.findutils}/bin PATH="''${PATH}":${pkgs.jq}/bin/ @@ -256,6 +254,8 @@ tasks: test: desc: Execute unit tests in Go. + env: + TEST_BY_TASK: true cmds: - echo "Execute unit tests in Go." - go test -cover -v ./... @@ -264,6 +264,8 @@ tasks: test-fuzz: desc: Conduct fuzzing tests.# + env: + TEST_BY_TASK: true cmds: - echo "Conduct fuzzing tests." - go test -v -fuzztime=30s -fuzz=Fuzz ./... diff --git a/go.mod b/go.mod index 4f9576d2a58058f88e8563c1ae8d5265b938e559..453b642b900262b3bcdf1f2b98b3bef15e81ef98 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,8 @@ require ( github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.26.0 // indirect golang.org/x/mod v0.8.0 // indirect golang.org/x/net v0.10.0 // indirect golang.org/x/sys v0.13.0 // indirect diff --git a/go.sum b/go.sum index 8181d581e3cb81249dffb5aa0dc01d56dd18750a..996f88a55e76433e7690f3b90894f5a5f24de26e 100644 --- a/go.sum +++ b/go.sum @@ -80,6 +80,10 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/issue-1_test.go b/issue-1_test.go index 63578ba3c92c512a9c3df3ad2e41ab3992afe084..ce9a16c7818569048c2183b259b7686b949198af 100644 --- a/issue-1_test.go +++ b/issue-1_test.go @@ -12,8 +12,7 @@ import ( func TestRoundTrip(t *testing.T) { if os.Getenv("TEST_BY_TASK") != "" { - t.Skip("Skipping test because CI_SERVER is set") - // TODO: run this test in CI + t.Skip("Skipping test because TEST_BY_TASK is set") } // type JobImport struct { diff --git a/logger.go b/logger.go new file mode 100644 index 0000000000000000000000000000000000000000..46e253a97efec361ccb9f148eecf440f89b46c34 --- /dev/null +++ b/logger.go @@ -0,0 +1,20 @@ +package jobqueue + +import "go.uber.org/zap" + +type Logger interface { + Info(msg string, keysAndValues ...interface{}) + Error(msg string, keysAndValues ...interface{}) +} + +type ZapAdapter struct { + logger *zap.Logger +} + +func (z *ZapAdapter) Info(msg string, keysAndValues ...interface{}) { + z.logger.Info(msg, zap.Any("info", keysAndValues)) +} + +func (z *ZapAdapter) Error(msg string, keysAndValues ...interface{}) { + z.logger.Error(msg, zap.Any("error", keysAndValues)) +} diff --git a/manager.go b/manager.go index 3edc059d05a7b7dd77aa77bf2eedc12fbd9a4680..7771d2eb3589423d054e30017da27375c05fccb0 100644 --- a/manager.go +++ b/manager.go @@ -26,6 +26,7 @@ type Manager struct { stateManager StateManager cronInstance *cron.Cron + logger Logger mu sync.Mutex } @@ -212,7 +213,7 @@ func (m *Manager) Stop() error { m.eventBus.Unsubscribe(QueueJob, m.jobEventCh) m.eventBus.Unsubscribe(JobReady, m.jobEventCh) - + close(m.jobEventCh) var wrappedErr error @@ -247,6 +248,10 @@ func (m *Manager) Stop() error { return wrappedErr } +func (m *Manager) SetLogger(logger Logger) { + m.logger = logger +} + func (m *Manager) handleJobEvents() { for event := range m.jobEventCh { diff --git a/scheduler_test.go b/scheduler_test.go index 9b6da3fbab43dd85c86453451fb57aa564c703f9..c2ce7f5052952809f95d601ceffa2f4693354a20 100644 --- a/scheduler_test.go +++ b/scheduler_test.go @@ -82,10 +82,16 @@ func TestCronScheduler_BasicFunctionality(t *testing.T) { eventBus := NewEventBus() job := NewJob[DummyResult]("test-job", &DummyRunnable{}) + c := cron.New(cron.WithSeconds()) genericJob := GenericJob(job) - cronScheduler := CronScheduler{cron: cron.New(cron.WithSeconds()), Spec: "*/1 * * * * *"} + cronScheduler := CronScheduler{ + cron: c, + Spec: "* * * * * *", + } _ = cronScheduler.Schedule(genericJob, eventBus) + c.Start() + defer c.Stop() jobChannel := make(chan interface{}) @@ -109,20 +115,20 @@ func TestCronScheduler_StopScheduler(t *testing.T) { c := cron.New(cron.WithSeconds()) - cronScheduler := CronScheduler{cron: c, Spec: "*/1 * * * * *"} + cronScheduler := CronScheduler{cron: c, Spec: "* * * * * *"} job := NewJob[DummyResult]("test-job", &DummyRunnable{}) genericJob := GenericJob(job) _ = cronScheduler.Schedule(genericJob, eventBus) + c.Start() + defer c.Stop() jobChannel := make(chan interface{}) go func() { for _ = range jobChannel { - atomic.AddInt32(&count, 1) - } }()