aboutsummaryrefslogtreecommitdiffhomepage
path: root/hst/fsoverlay_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-15 03:30:51 +0900
committerOphestra <cat@gensokyo.uk>2025-08-15 04:00:55 +0900
commit9ed3ba85eaba4bc4bd12b290dc4daf00ffe159dc (patch)
tree03301910c40c59eb94029f1a93b1e74e21b5226a /hst/fsoverlay_test.go
parent4433c993fae86634b813ee212803a84aaeedd374 (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.go50
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"},
+ })
+}