hst/fs: implement overlay fstype
All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 2m8s
Test / Hakurei (push) Successful in 3m8s
Test / Hpkg (push) Successful in 3m59s
Test / Sandbox (race detector) (push) Successful in 4m20s
Test / Hakurei (race detector) (push) Successful in 5m1s
Test / Flake checks (push) Successful in 1m27s
All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 2m8s
Test / Hakurei (push) Successful in 3m8s
Test / Hpkg (push) Successful in 3m59s
Test / Sandbox (race detector) (push) Successful in 4m20s
Test / Hakurei (race detector) (push) Successful in 5m1s
Test / Flake checks (push) Successful in 1m27s
This finally exposes overlay mounts in the high level hakurei API. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
50
hst/fsoverlay_test.go
Normal file
50
hst/fsoverlay_test.go
Normal file
@@ -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"},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user