metis/pkg/writer/writer_test.go

80 lines
2.3 KiB
Go
Raw Normal View History

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)
}
}