Files
taskq/x/metrics/metrics_test.go

69 lines
1.6 KiB
Go

package metrics
import (
"context"
"testing"
"time"
"code.tczkiot.com/wlw/taskq"
"github.com/redis/go-redis/v9"
)
func TestNewDefaultsAndName(t *testing.T) {
m := New(Options{})
if m == nil {
t.Fatalf("New returned nil")
}
if m.opts.Namespace == "" {
t.Fatalf("expected default Namespace")
}
if m.Name() != "metrics" {
t.Fatalf("unexpected Name: %s", m.Name())
}
}
func TestCollectNoInspectorNoQueues(t *testing.T) {
m := New(Options{Interval: time.Millisecond})
// ensure collect() is safe to call when inspector or queues are nil
m.collect()
}
func makeTestRedis(t *testing.T) redis.UniversalClient {
rdb := redis.NewClient(&redis.Options{Addr: "localhost:6379", DB: 15})
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := rdb.Ping(ctx).Err(); err != nil {
t.Skipf("redis not available: %v", err)
}
if err := rdb.FlushDB(context.Background()).Err(); err != nil {
t.Fatalf("failed to flush redis: %v", err)
}
return rdb
}
func TestMetricsLifecycleWithServlet(t *testing.T) {
rdb := makeTestRedis(t)
m := New(Options{Interval: time.Second})
// register plugin via default servlet
s := taskq.NewServlet()
taskq.SetDefault(s)
cfg := taskq.Config{Redis: rdb, Tasks: []*taskq.Task{}, Plugins: []taskq.Plugin{m}}
if err := taskq.Configure(cfg); err != nil {
t.Fatalf("Configure failed: %v", err)
}
if err := taskq.Init(context.Background()); err != nil {
t.Fatalf("Init failed: %v", err)
}
if err := taskq.Start(context.Background()); err != nil {
t.Fatalf("Start failed: %v", err)
}
taskq.Stop()
time.Sleep(500 * time.Millisecond)
rdb.Close()
}