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