Files
sponge/pkg/sasynq/scheduler_test.go
2025-07-31 20:15:52 +08:00

92 lines
2.2 KiB
Go

package sasynq
import (
"context"
"log"
"testing"
"time"
"go.uber.org/zap"
)
const TypeScheduledGet = "scheduled:get"
var zapLogger, _ = zap.NewProduction()
type ScheduledGetPayload struct {
URL string `json:"url"`
}
func handleScheduledGetTask(ctx context.Context, p *ScheduledGetPayload) error {
log.Printf("[ScheduledGet] Task for URL %s completed successfully", p.URL)
return nil
}
func registerSchedulerTasks(scheduler *Scheduler) ([]string, error) {
var entTryIDs []string
payload1 := &ScheduledGetPayload{URL: "https://google.com"}
entryID1, err := scheduler.RegisterTask("@every 2s", TypeScheduledGet, payload1)
if err != nil {
return nil, err
}
log.Printf("Registered periodic task with entry ID: %s", entryID1)
entTryIDs = append(entTryIDs, entryID1)
payload2 := &ScheduledGetPayload{URL: "https://bing.com"}
entryID2, err := scheduler.RegisterTask("@every 3s", TypeScheduledGet, payload2)
if err != nil {
return nil, err
}
log.Printf("Registered periodic task with entry ID: %s", entryID2)
entTryIDs = append(entTryIDs, entryID2)
return entTryIDs, nil
}
func runServer(redisCfg RedisConfig) (*Server, error) {
serverCfg := DefaultServerConfig(WithLogger(zapLogger)) // Uses critical, default, low queues
srv := NewServer(redisCfg, serverCfg)
srv.Use(LoggingMiddleware(WithLogger(zapLogger)))
// register task handle function, there are three registration methods available
RegisterTaskHandler(srv.Mux(), TypeScheduledGet, HandleFunc(handleScheduledGetTask))
srv.Run()
return srv, nil
}
func TestPeriodicTask(t *testing.T) {
scheduler := NewScheduler(getRedisConfig(),
WithSchedulerOptions(nil),
WithSchedulerLogger(WithLogger(zapLogger)),
WithSchedulerLogLevel(2),
)
entTryIDs, err := registerSchedulerTasks(scheduler)
if err != nil {
t.Log("register scheduler tasks failed", err)
} else {
scheduler.Run()
}
srv, err := runServer(getRedisConfig())
if err != nil {
t.Log("run server failed", err)
return
}
time.Sleep(7 * time.Second)
for _, entryID := range entTryIDs {
err = scheduler.Unregister(entryID)
if err != nil {
t.Log("unregister scheduler task failed", err)
} else {
t.Log("unregister scheduler task success", entryID)
}
}
srv.Shutdown()
}