feat: add asynq worker skeleton
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package tasks
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
)
|
||||
|
||||
const TypeDummy = "proxui.dummy"
|
||||
|
||||
type DummyPayload struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func NewDummyTask(message string) (*asynq.Task, error) {
|
||||
payload, err := json.Marshal(DummyPayload{Message: message})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return asynq.NewTask(TypeDummy, payload), nil
|
||||
}
|
||||
|
||||
type DummyHandler struct {
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func NewDummyHandler(logger *slog.Logger) DummyHandler {
|
||||
return DummyHandler{logger: logger}
|
||||
}
|
||||
|
||||
func (h DummyHandler) ProcessTask(_ context.Context, task *asynq.Task) error {
|
||||
var payload DummyPayload
|
||||
if err := json.Unmarshal(task.Payload(), &payload); err != nil {
|
||||
return fmt.Errorf("decode dummy payload: %w", err)
|
||||
}
|
||||
if payload.Message == "" {
|
||||
return fmt.Errorf("dummy message is required")
|
||||
}
|
||||
|
||||
h.logger.Info("processed dummy job", "message", payload.Message)
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package tasks
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"testing"
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
)
|
||||
|
||||
func TestDummyHandlerProcessesValidTask(t *testing.T) {
|
||||
task, err := NewDummyTask("hello-worker")
|
||||
if err != nil {
|
||||
t.Fatalf("NewDummyTask() error = %v", err)
|
||||
}
|
||||
|
||||
handler := NewDummyHandler(slog.Default())
|
||||
if err := handler.ProcessTask(context.Background(), task); err != nil {
|
||||
t.Fatalf("ProcessTask() error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDummyHandlerRejectsInvalidPayload(t *testing.T) {
|
||||
handler := NewDummyHandler(slog.Default())
|
||||
err := handler.ProcessTask(context.Background(), asynq.NewTask(TypeDummy, []byte(`{`)))
|
||||
if err == nil {
|
||||
t.Fatal("ProcessTask() error = nil, want error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDummyHandlerRejectsMissingMessage(t *testing.T) {
|
||||
handler := NewDummyHandler(slog.Default())
|
||||
err := handler.ProcessTask(context.Background(), asynq.NewTask(TypeDummy, []byte(`{"message":""}`)))
|
||||
if err == nil {
|
||||
t.Fatal("ProcessTask() error = nil, want error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user