package host import ( "os" "path/filepath" "testing" "time" "github.com/carlosframework/platform/internal/rollout" "golang.org/x/sys/unix" ) func TestPlan14RootFailureLegacySpecialFiles(t *testing.T) { for _, kind := range []string{"fifo", "symlink", "regular", "absent"} { t.Run(kind, func(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, rollout.FailureFile) switch kind { case "fifo": if err := unix.Mkfifo(path, 0600); err != nil { t.Fatal(err) } case "symlink": target := filepath.Join(dir, "target") if err := os.WriteFile(target, []byte("legacy"), 0600); err != nil { t.Fatal(err) } if err := os.Symlink(target, path); err != nil { t.Fatal(err) } case "regular": if err := os.WriteFile(path, []byte("legacy"), 0600); err != nil { t.Fatal(err) } } done := make(chan error, 1) go func() { _, err := rootFailureLegacy(dir); done <- err }() select { case err := <-done: if (err == nil) != (kind == "regular" || kind == "absent") { t.Fatal("unsafe legacy reader", kind, err) } case <-time.After(time.Second): t.Fatal("legacy file blocked root") } }) } }