metis/pkg/image/systemd_enablement_test.go

45 lines
1.3 KiB
Go
Raw Normal View History

package image
import (
"metis/pkg/inject"
"os"
"os/exec"
"path/filepath"
"testing"
)
// Use a disposable filesystem image to verify actual debugfs symlink semantics.
func TestSystemdSymlinkOnExt4(t *testing.T) {
for _, tool := range []string{"mkfs.ext4", "debugfs"} {
if _, err := exec.LookPath(tool); err != nil {
t.Skip("filesystem tools unavailable")
}
}
fs := filepath.Join(t.TempDir(), "test.ext4")
f, err := os.Create(fs)
if err != nil {
t.Fatal(err)
}
if err = f.Truncate(16 * 1024 * 1024); err != nil {
t.Fatal(err)
}
if err = f.Close(); err != nil {
t.Fatal(err)
}
if out, err := exec.Command("mkfs.ext4", "-q", "-F", fs).CombinedOutput(); err != nil {
t.Fatalf("mkfs: %v %s", err, out)
}
files := []inject.FileSpec{
{Path: "etc/systemd/system/metis-node-identity.service", Content: []byte("[Unit]\nDescription=Test\n"), Mode: 0644, RootFS: true},
{Path: "etc/systemd/system/multi-user.target.wants/metis-node-identity.service", Symlink: "../metis-node-identity.service", RootFS: true},
}
for i := 0; i < 2; i++ {
if err := writeExt4Files(fs, files); err != nil {
t.Fatal(err)
}
}
if err := verifyExt4File(fs, inject.FileSpec{Path: files[1].Path, Symlink: "../wrong.service"}, t.TempDir()); err == nil {
t.Fatal("wrong target accepted")
}
}