//go:build linux && rootrunner package host import ( "os" "path/filepath" "testing" "github.com/carlosframework/platform/internal/hostbox" ) func TestPlan14RootJournalNamespaceRootRunner(t *testing.T) { dir := generationRootRunnerDir(t) if err := os.Chmod(dir, 0700); err != nil { t.Fatal(err) } for _, name := range []string{"authority", "held-release", "unit-bindings", "unit-materializations", "retire", "migration-snapshot"} { path := filepath.Join(dir, name) if err := os.Mkdir(path, 0700); err != nil { t.Fatal(err) } if err := hostbox.PrepareRootJournalDirectory(dir); err != nil { t.Fatal("permitted namespace", name, err) } if err := os.Chown(path, 65534, 65534); err != nil { t.Fatal(err) } if err := hostbox.PrepareRootJournalDirectory(dir); err == nil { t.Fatal("service-owned namespace accepted", name) } if err := os.Chown(path, 0, 0); err != nil { t.Fatal(err) } if err := os.Chmod(path, 0777); err != nil { t.Fatal(err) } if err := hostbox.PrepareRootJournalDirectory(dir); err == nil { t.Fatal("writable namespace accepted", name) } if err := os.Chmod(path, 0700); err != nil { t.Fatal(err) } } unknown := filepath.Join(dir, "unreviewed") if err := os.Mkdir(unknown, 0700); err != nil { t.Fatal(err) } if err := hostbox.PrepareRootJournalDirectory(dir); err == nil { t.Fatal("unknown namespace accepted") } if err := os.Remove(unknown); err != nil { t.Fatal(err) } if err := hostbox.PrepareRootJournalDirectory(dir); err != nil { t.Fatal("retry", err) } }