mirror of https://github.com/containers/podman.git
Add imageParts.normalizedReference()
This will be used in normalizeTag to work with references instead of strings. Not used anywhere yet, should not change behavior. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
e58aa74766
commit
1c19d19c6e
|
@ -92,3 +92,17 @@ func (ip *imageParts) referenceWithRegistry(registry string) (reference.Named, e
|
||||||
}
|
}
|
||||||
return ref, nil
|
return ref, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normalizedReference returns a (normalized) reference for ip (with ip.hasRegistry)
|
||||||
|
func (ip *imageParts) normalizedReference() (reference.Named, error) {
|
||||||
|
if !ip.hasRegistry {
|
||||||
|
return nil, errors.Errorf("internal error: normalizedReference called on imageParts without a registry (%#v)", *ip)
|
||||||
|
}
|
||||||
|
// We need to round-trip via a string to get the right normalization of docker.io/library
|
||||||
|
s := ip.unnormalizedRef.String()
|
||||||
|
ref, err := reference.ParseNormalizedNamed(s)
|
||||||
|
if err != nil { // Should never happen
|
||||||
|
return nil, errors.Wrapf(err, "error normalizing qualified reference %#v", s)
|
||||||
|
}
|
||||||
|
return ref, nil
|
||||||
|
}
|
||||||
|
|
|
@ -93,3 +93,31 @@ func TestImagePartsReferenceWithRegistry(t *testing.T) {
|
||||||
_, err = parts.referenceWithRegistry("invalid@domain")
|
_, err = parts.referenceWithRegistry("invalid@domain")
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestImagePartsNormalizedReference(t *testing.T) {
|
||||||
|
const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
|
||||||
|
|
||||||
|
for _, c := range []struct{ input, expected string }{
|
||||||
|
{"busybox", ""}, // Unqualified input is invalid
|
||||||
|
{"docker.io/busybox", "docker.io/library/busybox"}, // docker.io single-name
|
||||||
|
{"example.com/busybox", "example.com/busybox"}, // example.com single-name
|
||||||
|
{"docker.io/ns/busybox", "docker.io/ns/busybox"}, // docker.io namespaced
|
||||||
|
{"example.com/ns/busybox", "example.com/ns/busybox"}, // example.com namespaced
|
||||||
|
{"example.com/ns/busybox:notlatest", "example.com/ns/busybox:notlatest"}, // name:tag
|
||||||
|
{"example.com/ns/busybox" + digestSuffix, "example.com/ns/busybox" + digestSuffix}, // name@digest
|
||||||
|
{ // name:tag@digest
|
||||||
|
"example.com/ns/busybox:notlatest" + digestSuffix, "example.com/ns/busybox:notlatest" + digestSuffix,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
parts, err := decompose(c.input)
|
||||||
|
require.NoError(t, err)
|
||||||
|
if c.expected == "" {
|
||||||
|
_, err := parts.normalizedReference()
|
||||||
|
assert.Error(t, err, c.input)
|
||||||
|
} else {
|
||||||
|
ref, err := parts.normalizedReference()
|
||||||
|
require.NoError(t, err, c.input)
|
||||||
|
assert.Equal(t, c.expected, ref.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue