mirror of https://github.com/containers/image.git
138 lines
5.1 KiB
Go
138 lines
5.1 KiB
Go
// +build !containers_image_storage_stub
|
|
|
|
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewReference(t *testing.T) {
|
|
newStore(t)
|
|
st, ok := Transport.(*storageTransport)
|
|
require.True(t, ok)
|
|
// Success is tested throughout; test only the failure
|
|
_, err := newReference(*st, nil, "")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestStorageReferenceTransport(t *testing.T) {
|
|
newStore(t)
|
|
ref, err := Transport.ParseReference("busybox")
|
|
require.NoError(t, err)
|
|
transport := ref.Transport()
|
|
st, ok := transport.(*storageTransport)
|
|
require.True(t, ok)
|
|
assert.Equal(t, *(Transport.(*storageTransport)), *st)
|
|
}
|
|
|
|
// A common list of reference formats to test for the various ImageReference methods.
|
|
var validReferenceTestCases = []struct {
|
|
input, dockerRef, canonical string
|
|
namespaces []string
|
|
}{
|
|
{
|
|
"busybox", "docker.io/library/busybox:latest", "docker.io/library/busybox:latest",
|
|
[]string{"docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"example.com/myns/ns2/busybox:notlatest", "example.com/myns/ns2/busybox:notlatest", "example.com/myns/ns2/busybox:notlatest",
|
|
[]string{"example.com/myns/ns2/busybox", "example.com/myns/ns2", "example.com/myns", "example.com"},
|
|
},
|
|
{
|
|
"@" + sha256digestHex, "", "@" + sha256digestHex,
|
|
[]string{},
|
|
},
|
|
{
|
|
"busybox@" + sha256digestHex, "docker.io/library/busybox:latest", "docker.io/library/busybox:latest@" + sha256digestHex,
|
|
[]string{"docker.io/library/busybox:latest", "docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"busybox@sha256:" + sha256digestHex, "docker.io/library/busybox@sha256:" + sha256digestHex, "docker.io/library/busybox@sha256:" + sha256digestHex,
|
|
[]string{"docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"busybox:notlatest@" + sha256digestHex, "docker.io/library/busybox:notlatest", "docker.io/library/busybox:notlatest@" + sha256digestHex,
|
|
[]string{"docker.io/library/busybox:notlatest", "docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"busybox:notlatest@sha256:" + sha256digestHex, "docker.io/library/busybox:notlatest@sha256:" + sha256digestHex, "docker.io/library/busybox:notlatest@sha256:" + sha256digestHex,
|
|
[]string{"docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"busybox@" + sha256Digest2 + "@" + sha256digestHex, "docker.io/library/busybox@" + sha256Digest2, "docker.io/library/busybox@" + sha256Digest2 + "@" + sha256digestHex,
|
|
[]string{"docker.io/library/busybox@" + sha256Digest2, "docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
{
|
|
"busybox:notlatest@" + sha256Digest2 + "@" + sha256digestHex, "docker.io/library/busybox:notlatest@" + sha256Digest2, "docker.io/library/busybox:notlatest@" + sha256Digest2 + "@" + sha256digestHex,
|
|
// FIXME: After …/busybox:tag@digest, there should be a …/busybox:tag, only then a plain …/busybox
|
|
[]string{"docker.io/library/busybox:notlatest@" + sha256Digest2, "docker.io/library/busybox", "docker.io/library", "docker.io"},
|
|
},
|
|
}
|
|
|
|
func TestStorageReferenceDockerReference(t *testing.T) {
|
|
newStore(t)
|
|
for _, c := range validReferenceTestCases {
|
|
ref, err := Transport.ParseReference(c.input)
|
|
require.NoError(t, err, c.input)
|
|
if c.dockerRef != "" {
|
|
dr := ref.DockerReference()
|
|
require.NotNil(t, dr, c.input)
|
|
assert.Equal(t, c.dockerRef, dr.String(), c.input)
|
|
} else {
|
|
dr := ref.DockerReference()
|
|
assert.Nil(t, dr, c.input)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStorageReferenceStringWithinTransport(t *testing.T) {
|
|
store := newStore(t)
|
|
optionsList := ""
|
|
options := store.GraphOptions()
|
|
if len(options) > 0 {
|
|
optionsList = ":" + strings.Join(options, ",")
|
|
}
|
|
storeSpec := fmt.Sprintf("[%s@%s+%s%s]", store.GraphDriverName(), store.GraphRoot(), store.RunRoot(), optionsList)
|
|
|
|
for _, c := range validReferenceTestCases {
|
|
ref, err := Transport.ParseReference(c.input)
|
|
require.NoError(t, err, c.input)
|
|
assert.Equal(t, storeSpec+c.canonical, ref.StringWithinTransport(), c.input)
|
|
}
|
|
}
|
|
|
|
func TestStorageReferencePolicyConfigurationIdentity(t *testing.T) {
|
|
store := newStore(t)
|
|
storeSpec := fmt.Sprintf("[%s@%s]", store.GraphDriverName(), store.GraphRoot())
|
|
|
|
for _, c := range validReferenceTestCases {
|
|
ref, err := Transport.ParseReference(c.input)
|
|
require.NoError(t, err, c.input)
|
|
assert.Equal(t, storeSpec+c.canonical, ref.PolicyConfigurationIdentity(), c.input)
|
|
}
|
|
}
|
|
|
|
func TestStorageReferencePolicyConfigurationNamespaces(t *testing.T) {
|
|
store := newStore(t)
|
|
storeSpec := fmt.Sprintf("[%s@%s]", store.GraphDriverName(), store.GraphRoot())
|
|
|
|
for _, c := range validReferenceTestCases {
|
|
ref, err := Transport.ParseReference(c.input)
|
|
require.NoError(t, err, c.input)
|
|
expectedNS := []string{}
|
|
for _, ns := range c.namespaces {
|
|
expectedNS = append(expectedNS, storeSpec+ns)
|
|
}
|
|
expectedNS = append(expectedNS, storeSpec)
|
|
expectedNS = append(expectedNS, fmt.Sprintf("[%s]", store.GraphRoot()))
|
|
assert.Equal(t, expectedNS, ref.PolicyConfigurationNamespaces(), c.input)
|
|
}
|
|
}
|
|
|
|
// NewImage, NewImageSource, NewImageDestination, DeleteImage tested in storage_test.go
|