2026-06-28 08:28:42 +00:00
|
|
|
package usecase
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"testing"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"haixun-backend/internal/library/clock"
|
|
|
|
|
"haixun-backend/internal/model/job/domain/entity"
|
|
|
|
|
"haixun-backend/internal/model/job/domain/enum"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestRunMaintenance_RepairsQueuedWithActiveLock(t *testing.T) {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
template := expandGraphTemplate()
|
|
|
|
|
queue := newMemoryQueueRepo()
|
|
|
|
|
runs := newMemoryRunRepo(nil)
|
|
|
|
|
started := clock.Now().UnixNano()
|
|
|
|
|
lockedUntil := clock.Now().Add(10 * time.Minute).UnixNano()
|
|
|
|
|
runs.run = &entity.Run{
|
|
|
|
|
TemplateType: template.Type,
|
|
|
|
|
Status: enum.RunStatusQueued,
|
|
|
|
|
WorkerType: "go",
|
|
|
|
|
LockedBy: "worker-a",
|
|
|
|
|
StartedAt: &started,
|
|
|
|
|
LockedUntil: &lockedUntil,
|
|
|
|
|
}
|
|
|
|
|
uc := testUseCaseFull(template, runs, nil, queue)
|
|
|
|
|
|
|
|
|
|
result, err := uc.RunMaintenance(ctx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("RunMaintenance() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
if result.RepairedStuckClaims != 1 {
|
|
|
|
|
t.Fatalf("RepairedStuckClaims = %d, want 1", result.RepairedStuckClaims)
|
|
|
|
|
}
|
|
|
|
|
if runs.run.Status != enum.RunStatusRunning {
|
|
|
|
|
t.Fatalf("status = %s, want running", runs.run.Status)
|
|
|
|
|
}
|
2026-07-06 06:13:14 +00:00
|
|
|
}
|