80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
package writer
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestWriteImageCopiesFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
src := filepath.Join(dir, "src.img")
|
|
dest := filepath.Join(dir, "dest.img")
|
|
content := []byte("metis-test")
|
|
if err := os.WriteFile(src, content, 0o644); err != nil {
|
|
t.Fatalf("write src: %v", err)
|
|
}
|
|
if err := WriteImage(context.Background(), src, dest); err != nil {
|
|
t.Fatalf("write image: %v", err)
|
|
}
|
|
got, err := os.ReadFile(dest)
|
|
if err != nil {
|
|
t.Fatalf("read dest: %v", err)
|
|
}
|
|
if string(got) != string(content) {
|
|
t.Fatalf("expected %q got %q", string(content), string(got))
|
|
}
|
|
}
|
|
|
|
func TestWriteImageWithProgressAndCancel(t *testing.T) {
|
|
dir := t.TempDir()
|
|
src := filepath.Join(dir, "src.img")
|
|
dest := filepath.Join(dir, "dest.img")
|
|
if err := os.WriteFile(src, []byte("metis-progress"), 0o644); err != nil {
|
|
t.Fatalf("write src: %v", err)
|
|
}
|
|
|
|
var calls []int64
|
|
if err := WriteImageWithProgress(context.Background(), src, dest, func(written, total int64) {
|
|
calls = append(calls, written)
|
|
if total <= 0 {
|
|
t.Fatalf("unexpected total: %d", total)
|
|
}
|
|
}); err != nil {
|
|
t.Fatalf("WriteImageWithProgress: %v", err)
|
|
}
|
|
if len(calls) == 0 || calls[len(calls)-1] != int64(len("metis-progress")) {
|
|
t.Fatalf("unexpected progress callbacks: %#v", calls)
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
cancel()
|
|
if err := WriteImageWithProgress(ctx, src, filepath.Join(dir, "cancelled.img"), nil); err == nil {
|
|
t.Fatal("expected cancel error")
|
|
}
|
|
}
|
|
|
|
func TestIsDevicePath(t *testing.T) {
|
|
if !isDevicePath("/dev/sdz") {
|
|
t.Fatal("expected /dev/sdz to be a device path")
|
|
}
|
|
if isDevicePath("/tmp/image.img") {
|
|
t.Fatal("did not expect regular file path to be treated as device")
|
|
}
|
|
}
|
|
|
|
func TestWriteImageErrorBranches(t *testing.T) {
|
|
if err := WriteImageWithProgress(context.Background(), "missing-src", "", nil); err == nil {
|
|
t.Fatal("expected empty destination error before source lookup")
|
|
}
|
|
dir := t.TempDir()
|
|
src := filepath.Join(dir, "src.img")
|
|
if err := os.WriteFile(src, []byte("data"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := WriteImageWithProgress(context.Background(), src, filepath.Join(dir, "missing", "dest.img"), nil); err != nil {
|
|
t.Fatalf("WriteImageWithProgress nested path: %v", err)
|
|
}
|
|
}
|