From 9ed3ba85eaba4bc4bd12b290dc4daf00ffe159dc Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 15 Aug 2025 03:30:51 +0900 Subject: hst/fs: implement overlay fstype This finally exposes overlay mounts in the high level hakurei API. Signed-off-by: Ophestra --- hst/fsoverlay_test.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 hst/fsoverlay_test.go (limited to 'hst/fsoverlay_test.go') diff --git a/hst/fsoverlay_test.go b/hst/fsoverlay_test.go new file mode 100644 index 00000000..18ed0773 --- /dev/null +++ b/hst/fsoverlay_test.go @@ -0,0 +1,50 @@ +package hst_test + +import ( + "testing" + + "hakurei.app/container" + "hakurei.app/hst" +) + +func TestFSOverlay(t *testing.T) { + checkFs(t, []fsTestCase{ + {"nil", (*hst.FSOverlay)(nil), false, nil, nil, nil, ""}, + {"nil lower", &hst.FSOverlay{Dst: m("/etc"), Lower: []*container.Absolute{nil}}, false, nil, nil, nil, ""}, + {"zero lower", &hst.FSOverlay{Dst: m("/etc"), Upper: m("/"), Work: m("/")}, false, nil, nil, nil, ""}, + {"zero lower ro", &hst.FSOverlay{Dst: m("/etc")}, false, nil, nil, nil, ""}, + {"short lower", &hst.FSOverlay{Dst: m("/etc"), Lower: ms("/etc")}, false, nil, nil, nil, ""}, + + {"full", &hst.FSOverlay{ + Dst: m("/nix/store"), + Lower: ms("/mnt-root/nix/.ro-store"), + Upper: m("/mnt-root/nix/.rw-store/upper"), + Work: m("/mnt-root/nix/.rw-store/work"), + }, true, container.Ops{&container.MountOverlayOp{ + Target: m("/nix/store"), + Lower: ms("/mnt-root/nix/.ro-store"), + Upper: m("/mnt-root/nix/.rw-store/upper"), + Work: m("/mnt-root/nix/.rw-store/work"), + }}, m("/nix/store"), ms("/mnt-root/nix/.rw-store/upper", "/mnt-root/nix/.rw-store/work", "/mnt-root/nix/.ro-store"), + "w*/nix/store:/mnt-root/nix/.rw-store/upper:/mnt-root/nix/.rw-store/work:/mnt-root/nix/.ro-store"}, + + {"ro", &hst.FSOverlay{ + Dst: m("/mnt/src"), + Lower: ms("/tmp/.src0", "/tmp/.src1"), + }, true, container.Ops{&container.MountOverlayOp{ + Target: m("/mnt/src"), + Lower: ms("/tmp/.src0", "/tmp/.src1"), + }}, m("/mnt/src"), ms("/tmp/.src0", "/tmp/.src1"), + "*/mnt/src:/tmp/.src0:/tmp/.src1"}, + + {"ro work", &hst.FSOverlay{ + Dst: m("/mnt/src"), + Lower: ms("/tmp/.src0", "/tmp/.src1"), + Work: m("/tmp"), + }, true, container.Ops{&container.MountOverlayOp{ + Target: m("/mnt/src"), + Lower: ms("/tmp/.src0", "/tmp/.src1"), + }}, m("/mnt/src"), ms("/tmp/.src0", "/tmp/.src1"), + "*/mnt/src:/tmp/.src0:/tmp/.src1"}, + }) +} -- cgit v1.3.1