container/initbind: check path equivalence by value
All checks were successful
Test / Create distribution (push) Successful in 34s
Test / Sandbox (push) Successful in 2m11s
Test / Hpkg (push) Successful in 4m6s
Test / Sandbox (race detector) (push) Successful in 4m23s
Test / Hakurei (race detector) (push) Successful in 5m2s
Test / Hakurei (push) Successful in 2m21s
Test / Flake checks (push) Successful in 1m29s
All checks were successful
Test / Create distribution (push) Successful in 34s
Test / Sandbox (push) Successful in 2m11s
Test / Hpkg (push) Successful in 4m6s
Test / Sandbox (race detector) (push) Successful in 4m23s
Test / Hakurei (race detector) (push) Successful in 5m2s
Test / Hakurei (push) Successful in 2m21s
Test / Flake checks (push) Successful in 1m29s
Same problem as autoroot, never updated the checks after integrating Absolute. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
375acb476d
commit
e463faf649
@ -85,10 +85,21 @@ func (b *BindMountOp) apply(*setupState) error {
|
|||||||
return hostProc.bindMount(source, target, flags, b.sourceFinal == b.Target)
|
return hostProc.bindMount(source, target, flags, b.sourceFinal == b.Target)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BindMountOp) Is(op Op) bool { vb, ok := op.(*BindMountOp); return ok && *b == *vb }
|
func (b *BindMountOp) Is(op Op) bool {
|
||||||
func (*BindMountOp) prefix() string { return "mounting" }
|
vb, ok := op.(*BindMountOp)
|
||||||
|
return ok && ((b == nil && vb == nil) || (b != nil && vb != nil &&
|
||||||
|
b.Source != nil && vb.Source != nil &&
|
||||||
|
b.Source.String() == vb.Source.String() &&
|
||||||
|
b.Target != nil && vb.Target != nil &&
|
||||||
|
b.Target.String() == vb.Target.String() &&
|
||||||
|
b.Flags == vb.Flags))
|
||||||
|
}
|
||||||
|
func (*BindMountOp) prefix() string { return "mounting" }
|
||||||
func (b *BindMountOp) String() string {
|
func (b *BindMountOp) String() string {
|
||||||
if b.Source == b.Target {
|
if b.Source == nil || b.Target == nil {
|
||||||
|
return "<invalid>"
|
||||||
|
}
|
||||||
|
if b.Source.String() == b.Target.String() {
|
||||||
return fmt.Sprintf("%q flags %#x", b.Source, b.Flags)
|
return fmt.Sprintf("%q flags %#x", b.Source, b.Flags)
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%q on %q flags %#x", b.Source, b.Target, b.Flags)
|
return fmt.Sprintf("%q on %q flags %#x", b.Source, b.Target, b.Flags)
|
||||||
|
63
container/initbind_test.go
Normal file
63
container/initbind_test.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package container
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestBindMountOp(t *testing.T) {
|
||||||
|
checkOpsBuilder(t, []opsBuilderTestCase{
|
||||||
|
{"autoetc", new(Ops).Bind(
|
||||||
|
MustAbs("/etc/"),
|
||||||
|
MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
0,
|
||||||
|
), Ops{
|
||||||
|
&BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
|
||||||
|
checkOpIs(t, []opIsTestCase{
|
||||||
|
{"zero", new(BindMountOp), new(BindMountOp), false},
|
||||||
|
|
||||||
|
{"internal ne", &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
}, &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
sourceFinal: MustAbs("/etc/"),
|
||||||
|
}, true},
|
||||||
|
|
||||||
|
{"differs", &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
}, &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
Flags: BindOptional,
|
||||||
|
}, false},
|
||||||
|
|
||||||
|
{"equals", &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
}, &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
}, true},
|
||||||
|
})
|
||||||
|
|
||||||
|
checkOpMeta(t, []opMetaTestCase{
|
||||||
|
{"invalid", new(BindMountOp), "mounting", "<invalid>"},
|
||||||
|
|
||||||
|
{"autoetc", &BindMountOp{
|
||||||
|
Source: MustAbs("/etc/"),
|
||||||
|
Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"),
|
||||||
|
}, "mounting", `"/etc/" on "/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659" flags 0x0`},
|
||||||
|
|
||||||
|
{"hostdev", &BindMountOp{
|
||||||
|
Source: MustAbs("/dev/"),
|
||||||
|
Target: MustAbs("/dev/"),
|
||||||
|
Flags: BindWritable | BindDevice,
|
||||||
|
}, "mounting", `"/dev/" flags 0x6`},
|
||||||
|
})
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user