From 205aa841f049d63c3eeda273c2603a7a92761497 Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Tue, 24 Oct 2023 01:04:48 +0200 Subject: [PATCH] feat: #1 --- Taskfile.yml | 4 ++++ devenv.nix | 6 ++++-- go.mod | 2 ++ go.sum | 4 ++++ issue-1_test.go | 3 +-- logger.go | 20 ++++++++++++++++++++ manager.go | 7 ++++++- scheduler_test.go | 14 ++++++++++---- 8 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 logger.go diff --git a/Taskfile.yml b/Taskfile.yml index b7313f4..1c9a46e 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 4a6a252..9c0b1eb 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 4f9576d..453b642 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 8181d58..996f88a 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 63578ba..ce9a16c 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 0000000..46e253a --- /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 3edc059..7771d2e 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 9b6da3f..c2ce7f5 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) - } }() -- GitLab