mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestExpireStalledAllocationsSQLFencesAndRequeuesWithoutPenalty(t *testing.T) {
|
|
for _, fragment := range []string{
|
|
"ALLOCATING", "PROCESS_READY", "ASSIGNMENT_READY",
|
|
"FOR UPDATE SKIP LOCKED",
|
|
"SET state = 'FAILED'",
|
|
"SET participation_active = FALSE",
|
|
"SET state = 'QUEUED'",
|
|
"INSERT INTO outbox",
|
|
"'state_changed'",
|
|
"'stalled-allocation:'",
|
|
} {
|
|
if !strings.Contains(ExpireStalledAllocationsSQL, fragment) {
|
|
t.Fatalf("ExpireStalledAllocationsSQL missing fragment %q:\n%s", fragment, ExpireStalledAllocationsSQL)
|
|
}
|
|
}
|
|
if !strings.Contains(ExpireStalledAllocationsSQL, "occurred_at', $4") {
|
|
t.Fatalf("stalled allocation event timestamp is not bound")
|
|
}
|
|
}
|
|
|
|
func TestExpireStalledAllocationsRejectsInvalidArgumentsWithoutDatabase(t *testing.T) {
|
|
now := time.Unix(1000, 0).UTC()
|
|
if _, err := ExpireStalledAllocations(context.Background(), nil, now, time.Minute, 10); err == nil {
|
|
t.Fatal("nil database accepted")
|
|
}
|
|
if _, err := ExpireStalledAllocations(context.Background(), nil, time.Time{}, time.Minute, 10); err == nil {
|
|
t.Fatal("zero time accepted")
|
|
}
|
|
if _, err := ExpireStalledAllocations(context.Background(), nil, now, 0, 10); err == nil {
|
|
t.Fatal("non-positive deadline accepted")
|
|
}
|
|
if _, err := ExpireStalledAllocations(context.Background(), nil, now, time.Minute, 0); err == nil {
|
|
t.Fatal("zero limit accepted")
|
|
}
|
|
if _, err := ExpireStalledAllocations(context.Background(), nil, now, time.Minute, 1001); err == nil {
|
|
t.Fatal("oversized limit accepted")
|
|
}
|
|
}
|