All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m18s
Test / Hakurei (push) Successful in 3m22s
Test / Hpkg (push) Successful in 4m17s
Test / Sandbox (race detector) (push) Successful in 5m33s
Test / Hakurei (race detector) (push) Successful in 3m1s
Test / Flake checks (push) Successful in 1m29s
This exposes the BindEnsure flag of BindMountOp. Signed-off-by: Ophestra <cat@gensokyo.uk>
122 lines
3.1 KiB
Go
122 lines
3.1 KiB
Go
package hst_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"hakurei.app/container"
|
|
"hakurei.app/hst"
|
|
)
|
|
|
|
func TestFSBind(t *testing.T) {
|
|
checkFs(t, []fsTestCase{
|
|
{"nil", (*hst.FSBind)(nil), false, nil, nil, nil, "<invalid>"},
|
|
{"ensure optional", &hst.FSBind{Source: m("/"), Ensure: true, Optional: true},
|
|
false, nil, nil, nil, "<invalid>"},
|
|
|
|
{"full", &hst.FSBind{
|
|
Target: m("/dev"),
|
|
Source: m("/mnt/dev"),
|
|
Optional: true,
|
|
Device: true,
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/mnt/dev"),
|
|
Target: m("/dev"),
|
|
Flags: container.BindWritable | container.BindDevice | container.BindOptional,
|
|
}}, m("/dev"), ms("/mnt/dev"),
|
|
"d+/mnt/dev:/dev"},
|
|
|
|
{"full ensure", &hst.FSBind{
|
|
Target: m("/dev"),
|
|
Source: m("/mnt/dev"),
|
|
Ensure: true,
|
|
Device: true,
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/mnt/dev"),
|
|
Target: m("/dev"),
|
|
Flags: container.BindWritable | container.BindDevice | container.BindEnsure,
|
|
}}, m("/dev"), ms("/mnt/dev"),
|
|
"d-/mnt/dev:/dev"},
|
|
|
|
{"full write dev", &hst.FSBind{
|
|
Target: m("/dev"),
|
|
Source: m("/mnt/dev"),
|
|
Write: true,
|
|
Device: true,
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/mnt/dev"),
|
|
Target: m("/dev"),
|
|
Flags: container.BindWritable | container.BindDevice,
|
|
}}, m("/dev"), ms("/mnt/dev"),
|
|
"d*/mnt/dev:/dev"},
|
|
|
|
{"full write", &hst.FSBind{
|
|
Target: m("/tmp"),
|
|
Source: m("/mnt/tmp"),
|
|
Write: true,
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/mnt/tmp"),
|
|
Target: m("/tmp"),
|
|
Flags: container.BindWritable,
|
|
}}, m("/tmp"), ms("/mnt/tmp"),
|
|
"w*/mnt/tmp:/tmp"},
|
|
|
|
{"full no flags", &hst.FSBind{
|
|
Target: m("/etc"),
|
|
Source: m("/mnt/etc"),
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/mnt/etc"),
|
|
Target: m("/etc"),
|
|
}}, m("/etc"), ms("/mnt/etc"),
|
|
"*/mnt/etc:/etc"},
|
|
|
|
{"nil dst", &hst.FSBind{
|
|
Source: m("/"),
|
|
}, true, container.Ops{&container.BindMountOp{
|
|
Source: m("/"),
|
|
Target: m("/"),
|
|
}}, m("/"), ms("/"),
|
|
"*/"},
|
|
|
|
{"special nil target", &hst.FSBind{
|
|
Source: m("/"),
|
|
Special: true,
|
|
}, false, nil, nil, nil, "<invalid>"},
|
|
|
|
{"special bad target", &hst.FSBind{
|
|
Source: m("/"),
|
|
Target: m("/var/"),
|
|
Special: true,
|
|
}, false, nil, nil, nil, "<invalid>"},
|
|
|
|
{"autoroot pd", &hst.FSBind{
|
|
Target: m("/"),
|
|
Source: m("/"),
|
|
Write: true,
|
|
Special: true,
|
|
}, true, container.Ops{&container.AutoRootOp{
|
|
Host: m("/"),
|
|
Flags: container.BindWritable,
|
|
}}, m("/"), ms("/"), "autoroot:w"},
|
|
|
|
{"autoroot silly", &hst.FSBind{
|
|
Target: m("/"),
|
|
Source: m("/etc"),
|
|
Write: true,
|
|
Special: true,
|
|
}, true, container.Ops{&container.AutoRootOp{
|
|
Host: m("/etc"),
|
|
Flags: container.BindWritable,
|
|
}}, m("/"), ms("/etc"), "autoroot:w:/etc"},
|
|
|
|
{"autoetc", &hst.FSBind{
|
|
Target: m("/etc/"),
|
|
Source: m("/etc/"),
|
|
Special: true,
|
|
}, true, container.Ops{
|
|
&container.MkdirOp{Path: m("/etc/"), Perm: 0755},
|
|
&container.BindMountOp{Source: m("/etc/"), Target: m("/etc/.host/:3")},
|
|
&container.AutoEtcOp{Prefix: ":3"},
|
|
}, m("/etc/"), ms("/etc/"), "autoetc:/etc/"},
|
|
})
|
|
}
|