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, } }