qr-scanner/services/scanner_test.go

65 lines
1.3 KiB
Go

package services
import (
"image"
"image/png"
"os"
"path/filepath"
"testing"
"time"
)
func TestScanner_EndToEnd_NoQRCode(t *testing.T) {
dir := t.TempDir()
imgPath := filepath.Join(dir, "blank.png")
f, err := os.Create(imgPath)
if err != nil {
t.Fatal(err)
}
img := image.NewRGBA(image.Rect(0, 0, 120, 120))
if err := png.Encode(f, img); err != nil {
t.Fatal(err)
}
_ = f.Close()
store := NewTaskStore()
scanner := NewScanner(store, 0)
task := &Task{
ID: "t1",
TempDir: dir,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Status: TaskUploaded,
Files: []TaskFile{
{Index: 1, RelPath: "blank.png", AbsPath: imgPath},
},
Concurrency: 1,
TimeoutS: 5,
}
store.Put(task)
if err := scanner.Start(task); err != nil {
t.Fatal(err)
}
deadline := time.Now().Add(5 * time.Second)
for time.Now().Before(deadline) {
cur, _ := store.Get("t1")
if cur.Status == TaskCompleted || cur.Status == TaskCanceled || cur.Status == TaskFailed {
results := cur.Results()
if len(results) != 1 {
t.Fatalf("expected 1 result, got %d", len(results))
}
if results[1].Success {
t.Fatalf("expected failure")
}
return
}
time.Sleep(50 * time.Millisecond)
}
t.Fatalf("timeout waiting for task completion")
}