| package containerd | |
| import ( | |
| "testing" | |
| "github.com/opencontainers/go-digest" | |
| ocispec "github.com/opencontainers/image-spec/specs-go/v1" | |
| "gotest.tools/v3/assert" | |
| is "gotest.tools/v3/assert/cmp" | |
| ) | |
| func TestIsRootfsChildOf(t *testing.T) { | |
| // Each unique letter is one distinct DiffID | |
| ab := toRootfs("AB") | |
| abc := toRootfs("ABC") | |
| abd := toRootfs("ABD") | |
| xyz := toRootfs("XYZ") | |
| xyzab := toRootfs("XYZAB") | |
| for _, tc := range []struct { | |
| name string | |
| parent ocispec.RootFS | |
| child ocispec.RootFS | |
| out bool | |
| }{ | |
| {parent: ab, child: abc, out: true, name: "one additional layer"}, | |
| {parent: xyz, child: xyzab, out: true, name: "two additional layers"}, | |
| {parent: xyz, child: xyz, out: false, name: "parent is not a child of itself"}, | |
| {parent: abc, child: abd, out: false, name: "sibling"}, | |
| {parent: abc, child: xyz, out: false, name: "completely different rootfs, but same length"}, | |
| {parent: abc, child: ab, out: false, name: "child can't be shorter than parent"}, | |
| {parent: ab, child: xyzab, out: false, name: "parent layers appended"}, | |
| } { | |
| tc := tc | |
| t.Run(tc.name, func(t *testing.T) { | |
| out := isRootfsChildOf(tc.child, tc.parent) | |
| assert.Check(t, is.Equal(out, tc.out)) | |
| }) | |
| } | |
| } | |
| func toRootfs(values string) ocispec.RootFS { | |
| dgsts := []digest.Digest{} | |
| for _, v := range values { | |
| vd := digest.FromString(string(v)) | |
| dgsts = append(dgsts, vd) | |
| } | |
| return ocispec.RootFS{ | |
| Type: "layers", | |
| DiffIDs: dgsts, | |
| } | |
| } |