diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-15 03:30:51 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-15 04:00:55 +0900 |
| commit | 9ed3ba85eaba4bc4bd12b290dc4daf00ffe159dc (patch) | |
| tree | 03301910c40c59eb94029f1a93b1e74e21b5226a /hst/fsoverlay_test.go | |
| parent | 4433c993fae86634b813ee212803a84aaeedd374 (diff) | |
hst/fs: implement overlay fstype
This finally exposes overlay mounts in the high level hakurei API.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'hst/fsoverlay_test.go')
| -rw-r--r-- | hst/fsoverlay_test.go | 50 |
1 files changed, 50 insertions, 0 deletions
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, "<invalid>"}, + {"nil lower", &hst.FSOverlay{Dst: m("/etc"), Lower: []*container.Absolute{nil}}, false, nil, nil, nil, "<invalid>"}, + {"zero lower", &hst.FSOverlay{Dst: m("/etc"), Upper: m("/"), Work: m("/")}, false, nil, nil, nil, "<invalid>"}, + {"zero lower ro", &hst.FSOverlay{Dst: m("/etc")}, false, nil, nil, nil, "<invalid>"}, + {"short lower", &hst.FSOverlay{Dst: m("/etc"), Lower: ms("/etc")}, false, nil, nil, nil, "<invalid>"}, + + {"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"}, + }) +} |
