93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestQueueEnqueueNextMarkDone(t *testing.T) {
|
|
q, err := NewQueue("")
|
|
if err != nil {
|
|
t.Fatalf("new queue: %v", err)
|
|
}
|
|
|
|
req := VideoRequest{URL: "https://example.com/watch?v=1", OutDir: "/tmp/videos", MetadataOnly: false}
|
|
id, err := q.Enqueue(req)
|
|
if err != nil {
|
|
t.Fatalf("enqueue: %v", err)
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
|
defer cancel()
|
|
|
|
item, err := q.Next(ctx)
|
|
if err != nil {
|
|
t.Fatalf("next: %v", err)
|
|
}
|
|
|
|
if item.ID != id {
|
|
t.Fatalf("expected id %s, got %s", id, item.ID)
|
|
}
|
|
|
|
if item.Request.URL != req.URL {
|
|
t.Fatalf("unexpected url: %s", item.Request.URL)
|
|
}
|
|
|
|
if err := q.MarkDone(item.ID); err != nil {
|
|
t.Fatalf("mark done: %v", err)
|
|
}
|
|
|
|
select {
|
|
case <-time.After(20 * time.Millisecond):
|
|
default:
|
|
}
|
|
}
|
|
|
|
func TestQueuePersistence(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
queuePath := filepath.Join(tmpDir, "queue.json")
|
|
|
|
q, err := NewQueue(queuePath)
|
|
if err != nil {
|
|
t.Fatalf("new queue: %v", err)
|
|
}
|
|
|
|
req := VideoRequest{URL: "https://example.com/watch?v=2", OutDir: "/data", MetadataOnly: true}
|
|
id, err := q.Enqueue(req)
|
|
if err != nil {
|
|
t.Fatalf("enqueue: %v", err)
|
|
}
|
|
|
|
if _, err := os.Stat(queuePath); err != nil {
|
|
t.Fatalf("queue file missing: %v", err)
|
|
}
|
|
|
|
q2, err := NewQueue(queuePath)
|
|
if err != nil {
|
|
t.Fatalf("reload queue: %v", err)
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
|
defer cancel()
|
|
|
|
item, err := q2.Next(ctx)
|
|
if err != nil {
|
|
t.Fatalf("next: %v", err)
|
|
}
|
|
|
|
if item.ID != id {
|
|
t.Fatalf("expected persisted id %s, got %s", id, item.ID)
|
|
}
|
|
|
|
if err := q2.MarkDone(item.ID); err != nil {
|
|
t.Fatalf("mark done: %v", err)
|
|
}
|
|
|
|
if _, err := os.Stat(queuePath); !os.IsNotExist(err) {
|
|
t.Fatalf("expected queue file removed after draining, got %v", err)
|
|
}
|
|
}
|