metis/pkg/image/rootfs_test.go

89 lines
1.9 KiB
Go
Raw Normal View History

package image
import (
"os"
"os/exec"
"path/filepath"
"testing"
"metis/pkg/inject"
)
func TestWriteExt4Files(t *testing.T) {
if _, err := exec.LookPath("mkfs.ext4"); err != nil {
t.Skip("mkfs.ext4 not available")
}
if _, err := exec.LookPath("debugfs"); err != nil {
t.Skip("debugfs not available")
}
workDir := t.TempDir()
fsPath := filepath.Join(workDir, "root.ext4")
f, err := os.Create(fsPath)
if err != nil {
t.Fatal(err)
}
if err := f.Truncate(32 * 1024 * 1024); err != nil {
t.Fatal(err)
}
if err := f.Close(); err != nil {
t.Fatal(err)
}
cmd := exec.Command("mkfs.ext4", "-F", fsPath)
if out, err := cmd.CombinedOutput(); err != nil {
t.Fatalf("mkfs.ext4: %v: %s", err, string(out))
}
files := []inject.FileSpec{
{
Path: "etc/metis/firstboot.env",
Content: []byte("METIS_HOSTNAME='titan-13'\n"),
Mode: 0o600,
RootFS: true,
},
{
Path: "usr/local/sbin/test.sh",
Content: []byte("#!/usr/bin/env bash\nexit 0\n"),
Mode: 0o755,
RootFS: true,
},
}
if err := writeExt4Files(fsPath, files); err != nil {
t.Fatalf("writeExt4Files: %v", err)
}
}
func TestParentDirs(t *testing.T) {
got := parentDirs("etc/metis/firstboot.env")
want := []string{"/etc", "/etc/metis"}
if len(got) != len(want) {
t.Fatalf("parentDirs length mismatch: got %v want %v", got, want)
}
for i := range want {
if got[i] != want[i] {
t.Fatalf("parentDirs[%d] = %q want %q", i, got[i], want[i])
}
}
}
func TestInjectRootFSWithProgressSkipsWhenNoRootFiles(t *testing.T) {
steps := make([]string, 0)
err := InjectRootFSWithProgress("unused.img", []inject.FileSpec{
{
Path: "boot/env.txt",
Content: []byte("ignored"),
Mode: 0o644,
RootFS: false,
},
}, func(step string) {
steps = append(steps, step)
})
if err != nil {
t.Fatalf("expected no error when there are no rootfs files, got %v", err)
}
if len(steps) != 0 {
t.Fatalf("expected no progress callbacks, got %#v", steps)
}
}