aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/initoverlay_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-08-20 17:33:15 +0900
committerOphestra <cat@gensokyo.uk>2025-08-20 17:33:15 +0900
commit696e5938989dc5652dbf56686c289dd6994c9d4c (patch)
tree5d619b7fd228b44ff154472c63a93b29069ff1b0 /container/initoverlay_test.go
parent97ab24feef0d3cb1da063a910e477823b693fba0 (diff)
container/initoverlay: check path equivalence by value
Fixes regression introduced while integrating Absolute. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/initoverlay_test.go')
-rw-r--r--container/initoverlay_test.go111
1 files changed, 111 insertions, 0 deletions
diff --git a/container/initoverlay_test.go b/container/initoverlay_test.go
new file mode 100644
index 00000000..ae4cd1bf
--- /dev/null
+++ b/container/initoverlay_test.go
@@ -0,0 +1,111 @@
+package container
+
+import "testing"
+
+func TestMountOverlayOp(t *testing.T) {
+ checkOpsBuilder(t, []opsBuilderTestCase{
+ {"full", new(Ops).Overlay(
+ MustAbs("/nix/store"),
+ MustAbs("/mnt-root/nix/.rw-store/upper"),
+ MustAbs("/mnt-root/nix/.rw-store/work"),
+ MustAbs("/mnt-root/nix/.ro-store"),
+ ), Ops{
+ &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ },
+ }},
+
+ {"ephemeral", new(Ops).OverlayEphemeral(MustAbs("/nix/store"), MustAbs("/mnt-root/nix/.ro-store")), Ops{
+ &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/"),
+ },
+ }},
+
+ {"readonly", new(Ops).OverlayReadonly(MustAbs("/nix/store"), MustAbs("/mnt-root/nix/.ro-store")), Ops{
+ &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ },
+ }},
+ })
+
+ checkOpIs(t, []opIsTestCase{
+ {"zero", new(MountOverlayOp), new(MountOverlayOp), false},
+
+ {"differs target", &MountOverlayOp{
+ Target: MustAbs("/nix/store/differs"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work")}, false},
+
+ {"differs lower", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store/differs")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work")}, false},
+
+ {"differs upper", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper/differs"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work")}, false},
+
+ {"differs work", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work/differs"),
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work")}, false},
+
+ {"equals ro", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")}}, true},
+
+ {"equals", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ }, &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work")}, true},
+ })
+
+ checkOpMeta(t, []opMetaTestCase{
+ {"nix", &MountOverlayOp{
+ Target: MustAbs("/nix/store"),
+ Lower: []*Absolute{MustAbs("/mnt-root/nix/.ro-store")},
+ Upper: MustAbs("/mnt-root/nix/.rw-store/upper"),
+ Work: MustAbs("/mnt-root/nix/.rw-store/work"),
+ }, "mounting", `overlay on "/nix/store" with 1 layers`},
+ })
+}