Files
ITWorx-Pulse-Public/internal/alertworker/postgres_store_integration_test.go
T
ITWorx Pulse release export bd774932d5
Public source validation / validate (push) Failing after 3m8s
Publish ITWorx Pulse source
2026-09-03 02:09:19 +02:00

58 lines
2.0 KiB
Go

package alertworker
import (
"context"
"os"
"testing"
"time"
"github.com/itworx/pulse/internal/alert"
"github.com/itworx/pulse/internal/database"
)
func TestPostgreSQLLeaseStoreCoordinatesAndReclaimsExpiredLease(t *testing.T) {
dsn := os.Getenv("PULSE_TEST_DATABASE_URL")
if dsn == "" {
t.Skip("PULSE_TEST_DATABASE_URL is not set")
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
pool, err := database.NewPool(ctx, database.Config{URL: dsn, MaxConns: 4, MinConns: 1})
if err != nil {
t.Fatal(err)
}
defer pool.Close()
if err := database.Migrate(ctx, pool); err != nil {
t.Fatal(err)
}
store := PostgresLeaseStore{Pool: pool}
now := time.Date(2026, 8, 2, 5, 0, 0, 0, time.UTC)
key := alert.NewID()
scheduled := now
first, acquired, err := store.Acquire(ctx, jobType, key, scheduled, "worker-a", now, time.Minute)
if err != nil || !acquired {
t.Fatalf("first acquire lease=%#v acquired=%v err=%v", first, acquired, err)
}
if _, acquired, err := store.Acquire(ctx, jobType, key, scheduled, "worker-b", now, time.Minute); err != nil || acquired {
t.Fatalf("duplicate acquire acquired=%v err=%v", acquired, err)
}
if err := store.Complete(ctx, first, "completed", ""); err != nil {
t.Fatal(err)
}
if _, acquired, err := store.Acquire(ctx, jobType, key, scheduled, "worker-b", now, time.Minute); err != nil || acquired {
t.Fatalf("completed acquire acquired=%v err=%v", acquired, err)
}
expiredKey := alert.NewID()
expired, acquired, err := store.Acquire(ctx, jobType, expiredKey, scheduled, "worker-a", now, time.Second)
if err != nil || !acquired {
t.Fatalf("expired first acquire=%#v acquired=%v err=%v", expired, acquired, err)
}
reclaimed, acquired, err := store.Acquire(ctx, jobType, expiredKey, scheduled, "worker-b", now.Add(2*time.Second), time.Minute)
if err != nil || !acquired || reclaimed.JobKey != expiredKey {
t.Fatalf("reclaim lease=%#v acquired=%v err=%v", reclaimed, acquired, err)
}
if err := store.Complete(ctx, reclaimed, "failed", "timeout"); err != nil {
t.Fatal(err)
}
}