diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-20 17:14:36 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-20 17:14:36 +0900 |
| commit | 97ab24feef0d3cb1da063a910e477823b693fba0 (patch) | |
| tree | 43a1a6134729854842431f2a14a11e25fde3aa77 | |
| parent | 31f0dd36df3ad5574ac4e9cab19b943f5c129ea2 (diff) | |
container/init: use absolute compare method
More checks are also added.
Signed-off-by: Ophestra <cat@gensokyo.uk>
| -rw-r--r-- | container/autoroot.go | 3 | ||||
| -rw-r--r-- | container/autoroot_test.go | 22 | ||||
| -rw-r--r-- | container/initbind.go | 6 | ||||
| -rw-r--r-- | container/initbind_test.go | 18 | ||||
| -rw-r--r-- | container/initdev.go | 3 | ||||
| -rw-r--r-- | container/initdev_test.go | 19 | ||||
| -rw-r--r-- | container/initmkdir.go | 3 | ||||
| -rw-r--r-- | container/initmkdir_test.go | 3 |
8 files changed, 58 insertions, 19 deletions
diff --git a/container/autoroot.go b/container/autoroot.go index 640d72d1..a7a3f33c 100644 --- a/container/autoroot.go +++ b/container/autoroot.go @@ -73,8 +73,7 @@ func (r *AutoRootOp) apply(state *setupState) error { func (r *AutoRootOp) Is(op Op) bool { vr, ok := op.(*AutoRootOp) return ok && ((r == nil && vr == nil) || (r != nil && vr != nil && - r.Host != nil && vr.Host != nil && - r.Host.String() == vr.Host.String() && + r.Host != nil && vr.Host != nil && r.Host.Is(vr.Host) && r.Prefix == vr.Prefix && r.Flags == vr.Flags)) } func (*AutoRootOp) prefix() string { return "setting up" } diff --git a/container/autoroot_test.go b/container/autoroot_test.go index 77440ace..5a77435e 100644 --- a/container/autoroot_test.go +++ b/container/autoroot_test.go @@ -27,7 +27,7 @@ func TestAutoRootOp(t *testing.T) { resolved: []Op{new(BindMountOp)}, }, true}, - {"differs", &AutoRootOp{ + {"prefix differs", &AutoRootOp{ Host: MustAbs("/"), Prefix: "\x00", Flags: BindWritable, @@ -37,6 +37,26 @@ func TestAutoRootOp(t *testing.T) { Flags: BindWritable, }, false}, + {"flags differs", &AutoRootOp{ + Host: MustAbs("/"), + Prefix: ":3", + Flags: BindWritable | BindDevice, + }, &AutoRootOp{ + Host: MustAbs("/"), + Prefix: ":3", + Flags: BindWritable, + }, false}, + + {"host differs", &AutoRootOp{ + Host: MustAbs("/tmp/"), + Prefix: ":3", + Flags: BindWritable, + }, &AutoRootOp{ + Host: MustAbs("/"), + Prefix: ":3", + Flags: BindWritable, + }, false}, + {"equals", &AutoRootOp{ Host: MustAbs("/"), Prefix: ":3", diff --git a/container/initbind.go b/container/initbind.go index 17cd9598..0b34851e 100644 --- a/container/initbind.go +++ b/container/initbind.go @@ -88,10 +88,8 @@ func (b *BindMountOp) apply(*setupState) error { func (b *BindMountOp) Is(op Op) bool { 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.Source != nil && vb.Source != nil && b.Source.Is(vb.Source) && + b.Target != nil && vb.Target != nil && b.Target.Is(vb.Target) && b.Flags == vb.Flags)) } func (*BindMountOp) prefix() string { return "mounting" } diff --git a/container/initbind_test.go b/container/initbind_test.go index dec9113a..f0792613 100644 --- a/container/initbind_test.go +++ b/container/initbind_test.go @@ -28,7 +28,7 @@ func TestBindMountOp(t *testing.T) { sourceFinal: MustAbs("/etc/"), }, true}, - {"differs", &BindMountOp{ + {"flags differs", &BindMountOp{ Source: MustAbs("/etc/"), Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), }, &BindMountOp{ @@ -37,6 +37,22 @@ func TestBindMountOp(t *testing.T) { Flags: BindOptional, }, false}, + {"source differs", &BindMountOp{ + Source: MustAbs("/.hakurei/etc/"), + Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), + }, &BindMountOp{ + Source: MustAbs("/etc/"), + Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), + }, false}, + + {"target differs", &BindMountOp{ + Source: MustAbs("/etc/"), + Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), + }, &BindMountOp{ + Source: MustAbs("/etc/"), + Target: MustAbs("/etc/"), + }, false}, + {"equals", &BindMountOp{ Source: MustAbs("/etc/"), Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), diff --git a/container/initdev.go b/container/initdev.go index c06cf224..71c30f42 100644 --- a/container/initdev.go +++ b/container/initdev.go @@ -129,8 +129,7 @@ func (d *MountDevOp) apply(state *setupState) error { func (d *MountDevOp) Is(op Op) bool { vd, ok := op.(*MountDevOp) return ok && ((d == nil && vd == nil) || (d != nil && vd != nil && - d.Target != nil && vd.Target != nil && - d.Target.String() == vd.Target.String() && + d.Target != nil && vd.Target != nil && d.Target.Is(vd.Target) && d.Mqueue == vd.Mqueue && d.Write == vd.Write)) } func (*MountDevOp) prefix() string { return "mounting" } diff --git a/container/initdev_test.go b/container/initdev_test.go index 3df56d51..0d6ea5af 100644 --- a/container/initdev_test.go +++ b/container/initdev_test.go @@ -22,30 +22,37 @@ func TestMountDevOp(t *testing.T) { checkOpIs(t, []opIsTestCase{ {"zero", new(MountDevOp), new(MountDevOp), false}, - {"equals", &MountDevOp{ + {"write differs", &MountDevOp{ Target: MustAbs("/dev/"), Mqueue: true, }, &MountDevOp{ Target: MustAbs("/dev/"), Mqueue: true, - }, true}, + Write: true, + }, false}, - {"differs", &MountDevOp{ + {"mqueue differs", &MountDevOp{ Target: MustAbs("/dev/"), - Mqueue: true, }, &MountDevOp{ Target: MustAbs("/dev/"), Mqueue: true, - Write: true, }, false}, - {"differs path", &MountDevOp{ + {"target differs", &MountDevOp{ Target: MustAbs("/"), Mqueue: true, }, &MountDevOp{ Target: MustAbs("/dev/"), Mqueue: true, }, false}, + + {"equals", &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, true}, }) checkOpMeta(t, []opMetaTestCase{ diff --git a/container/initmkdir.go b/container/initmkdir.go index 3043df9f..6153106b 100644 --- a/container/initmkdir.go +++ b/container/initmkdir.go @@ -32,8 +32,7 @@ func (m *MkdirOp) apply(*setupState) error { func (m *MkdirOp) Is(op Op) bool { vm, ok := op.(*MkdirOp) return ok && ((m == nil && vm == nil) || (m != nil && vm != nil && - m.Path != nil && vm.Path != nil && - m.Path.String() == vm.Path.String() && + m.Path != nil && vm.Path != nil && m.Path.Is(vm.Path) && m.Perm == vm.Perm)) } func (*MkdirOp) prefix() string { return "creating" } diff --git a/container/initmkdir_test.go b/container/initmkdir_test.go index 89058a85..d5c6f0ba 100644 --- a/container/initmkdir_test.go +++ b/container/initmkdir_test.go @@ -11,7 +11,8 @@ func TestMkdirOp(t *testing.T) { checkOpIs(t, []opIsTestCase{ {"zero", new(MkdirOp), new(MkdirOp), false}, - {"differs", &MkdirOp{Path: MustAbs("/"), Perm: 0755}, &MkdirOp{Path: MustAbs("/etc/"), Perm: 0755}, false}, + {"path differs", &MkdirOp{Path: MustAbs("/"), Perm: 0755}, &MkdirOp{Path: MustAbs("/etc/"), Perm: 0755}, false}, + {"perm differs", &MkdirOp{Path: MustAbs("/")}, &MkdirOp{Path: MustAbs("/"), Perm: 0755}, false}, {"equals", &MkdirOp{Path: MustAbs("/")}, &MkdirOp{Path: MustAbs("/")}, true}, }) |
