diff --git a/container/autoetc.go b/container/autoetc.go index 23b1a86..44b5d76 100644 --- a/container/autoetc.go +++ b/container/autoetc.go @@ -61,8 +61,7 @@ func (e *AutoEtcOp) apply(state *setupState) error { return nil } -// bypasses abs check, use with caution! -func (e *AutoEtcOp) hostPath() *Absolute { return &Absolute{FHSEtc + e.hostRel()} } +func (e *AutoEtcOp) hostPath() *Absolute { return AbsFHSEtc.Append(e.hostRel()) } func (e *AutoEtcOp) hostRel() string { return ".host/" + e.Prefix } func (e *AutoEtcOp) Is(op Op) bool { diff --git a/container/autoetc_test.go b/container/autoetc_test.go new file mode 100644 index 0000000..4040fb0 --- /dev/null +++ b/container/autoetc_test.go @@ -0,0 +1,40 @@ +package container + +import "testing" + +func TestAutoEtcOp(t *testing.T) { + checkOpsBuilder(t, []opsBuilderTestCase{ + {"pd", new(Ops).Etc(MustAbs("/etc/"), "048090b6ed8f9ebb10e275ff5d8c0659"), Ops{ + &MkdirOp{Path: MustAbs("/etc/"), Perm: 0755}, + &BindMountOp{ + Source: MustAbs("/etc/"), + Target: MustAbs("/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659"), + }, + &AutoEtcOp{Prefix: "048090b6ed8f9ebb10e275ff5d8c0659"}, + }}, + }) + + checkOpIs(t, []opIsTestCase{ + {"zero", new(AutoEtcOp), new(AutoEtcOp), true}, + {"differs", &AutoEtcOp{Prefix: "\x00"}, &AutoEtcOp{":3"}, false}, + {"equals", &AutoEtcOp{Prefix: ":3"}, &AutoEtcOp{":3"}, true}, + }) + + checkOpMeta(t, []opMetaTestCase{ + {"etc", &AutoEtcOp{ + Prefix: ":3", + }, "setting up", "auto etc :3"}, + }) + + t.Run("host path rel", func(t *testing.T) { + op := &AutoEtcOp{Prefix: "048090b6ed8f9ebb10e275ff5d8c0659"} + wantHostPath := "/etc/.host/048090b6ed8f9ebb10e275ff5d8c0659" + wantHostRel := ".host/048090b6ed8f9ebb10e275ff5d8c0659" + if got := op.hostPath(); got.String() != wantHostPath { + t.Errorf("hostPath: %q, want %q", got, wantHostPath) + } + if got := op.hostRel(); got != wantHostRel { + t.Errorf("hostRel: %q, want %q", got, wantHostRel) + } + }) +}