//go:build linux && rootrunner package host import ( "github.com/carlosframework/platform/internal/hostbox" "os" "path/filepath" "testing" ) func TestPlan14RebootStopDescriptorIdentity(t *testing.T) { root, err := os.MkdirTemp("/var/lib", "carlos-p3-stop-device-") if err != nil { t.Fatal(err) } defer os.RemoveAll(root) path := filepath.Join(root, "state") if err := os.Mkdir(path, 0700); err != nil { t.Fatal(err) } persistent := testPersistentInventory(t, path) oldDevice := persistent.Device + 1 persistent.Boot = "previous-boot" persistent.Device = oldDevice persistent.Mount++ entry := hostbox.StopInventoryEntry{Kind: "path", ManagedRoot: "data", RelativePath: "state", Materialization: "materialized", Device: oldDevice, Inode: persistent.Inode, Type: persistent.Mode & 0170000, Identity: persistent} in := StopInventory{Complete: true, Entries: []hostbox.StopInventoryEntry{entry}} k := LinuxStopKernel{ManagedRoots: map[string]string{"data": root}} files, err := k.rebootStopFiles(t.Context(), in, []hostbox.StopFileIdentity{{Device: oldDevice, Inode: 71}}) now := testPersistentInventory(t, path) if err != nil || len(files) != 1 || files[0].Device != now.Device || files[0].Inode != 71 { t.Fatal("old deny set not rebased", files, err) } if _, err = k.rebootStopFiles(t.Context(), in, []hostbox.StopFileIdentity{{Device: oldDevice + 1, Inode: 71}}); err == nil { t.Fatal("unmapped filesystem accepted") } in.Entries[0].Identity.Filesystem = "foreign" if _, err = k.rebootStopFiles(t.Context(), in, []hostbox.StopFileIdentity{{Device: oldDevice, Inode: 71}}); err == nil { t.Fatal("foreign filesystem accepted") } }