worker を追加(yt-dlp によるダウンロード、段階別進捗、ffprobe 検査、実行中の取り消し)
This commit is contained in:
@@ -405,6 +405,47 @@ func TestCancelAndStaleBoundary(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestHeartbeatAndGracefulRequeue(t *testing.T) {
|
||||
s := New(testPool(t, true))
|
||||
ctx := context.Background()
|
||||
job, _, err := s.Enqueue(ctx, sampleEpisode("heartbeat"), "manual")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := s.Heartbeat(ctx, job.ID); !errors.Is(err, ErrInvalidTransition) {
|
||||
t.Fatalf("待機中の heartbeat: %v", err)
|
||||
}
|
||||
claimed, err := s.ClaimNext(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
old := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||
if _, err := s.pool.Exec(ctx, `UPDATE download_jobs SET heartbeat_at=$2 WHERE id=$1`, claimed.ID, old); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := s.Heartbeat(ctx, claimed.ID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
heartbeated, err := s.GetJob(ctx, claimed.ID)
|
||||
if err != nil || heartbeated.HeartbeatAt == nil || !heartbeated.HeartbeatAt.After(old) {
|
||||
t.Fatalf("heartbeat: %+v %v", heartbeated, err)
|
||||
}
|
||||
bytes := int64(10)
|
||||
if err := s.UpdateProgress(ctx, claimed.ID, Progress{Phase: "video", DownloadedBytes: &bytes}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := s.RequeueRunning(ctx, claimed.ID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
requeued, err := s.GetJob(ctx, claimed.ID)
|
||||
if err != nil || requeued.Status != "queued" || requeued.StartedAt != nil || requeued.HeartbeatAt != nil || requeued.Phase != nil || requeued.DownloadedBytes != nil || requeued.Attempts != 1 {
|
||||
t.Fatalf("graceful requeue: %+v %v", requeued, err)
|
||||
}
|
||||
if err := s.RequeueRunning(ctx, claimed.ID); !errors.Is(err, ErrInvalidTransition) {
|
||||
t.Fatalf("待機中の再復帰: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRejectedTransitions(t *testing.T) {
|
||||
pool := testPool(t, true)
|
||||
s := New(pool)
|
||||
|
||||
Reference in New Issue
Block a user