diff --git a/container/initdev.go b/container/initdev.go index 827df9e..c06cf22 100644 --- a/container/initdev.go +++ b/container/initdev.go @@ -126,8 +126,14 @@ func (d *MountDevOp) apply(state *setupState) error { fmt.Sprintf("cannot remount %q:", target)) } -func (d *MountDevOp) Is(op Op) bool { vd, ok := op.(*MountDevOp); return ok && *d == *vd } -func (*MountDevOp) prefix() string { return "mounting" } +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.Mqueue == vd.Mqueue && d.Write == vd.Write)) +} +func (*MountDevOp) prefix() string { return "mounting" } func (d *MountDevOp) String() string { if d.Mqueue { return fmt.Sprintf("dev on %q with mqueue", d.Target) diff --git a/container/initdev_test.go b/container/initdev_test.go new file mode 100644 index 0000000..3df56d5 --- /dev/null +++ b/container/initdev_test.go @@ -0,0 +1,61 @@ +package container + +import "testing" + +func TestMountDevOp(t *testing.T) { + checkOpsBuilder(t, []opsBuilderTestCase{ + {"dev", new(Ops).Dev(MustAbs("/dev/"), true), Ops{ + &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, + }}, + + {"dev writable", new(Ops).DevWritable(MustAbs("/.hakurei/dev/"), false), Ops{ + &MountDevOp{ + Target: MustAbs("/.hakurei/dev/"), + Write: true, + }, + }}, + }) + + checkOpIs(t, []opIsTestCase{ + {"zero", new(MountDevOp), new(MountDevOp), false}, + + {"equals", &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, true}, + + {"differs", &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + Write: true, + }, false}, + + {"differs path", &MountDevOp{ + Target: MustAbs("/"), + Mqueue: true, + }, &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, false}, + }) + + checkOpMeta(t, []opMetaTestCase{ + {"mqueue", &MountDevOp{ + Target: MustAbs("/dev/"), + Mqueue: true, + }, "mounting", `dev on "/dev/" with mqueue`}, + + {"dev", &MountDevOp{ + Target: MustAbs("/dev/"), + }, "mounting", `dev on "/dev/"`}, + }) +}