Public source validation / validate (push) Failing after 3m8s
58 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|