mirror of
https://github.com/containers/image.git
synced 2025-04-18 19:44:05 +03:00
This is just the minimal update: the gofmt-created updates have been reviewed and edited to preserve original semantic intent, but I didn't review all existing comments to benefit from the new syntax. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
176 lines
5.0 KiB
Go
176 lines
5.0 KiB
Go
package sif
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
_ "github.com/containers/image/v5/internal/testing/explicitfilepath-tmpdir"
|
|
"github.com/containers/image/v5/types"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTransportName(t *testing.T) {
|
|
assert.Equal(t, "sif", Transport.Name())
|
|
}
|
|
|
|
func TestTransportParseReference(t *testing.T) {
|
|
testNewReference(t, Transport.ParseReference)
|
|
}
|
|
|
|
func TestTransportValidatePolicyConfigurationScope(t *testing.T) {
|
|
for _, scope := range []string{
|
|
"/etc/passwd",
|
|
"/this/does/not/exist",
|
|
} {
|
|
err := Transport.ValidatePolicyConfigurationScope(scope)
|
|
assert.NoError(t, err, scope)
|
|
}
|
|
|
|
for _, scope := range []string{
|
|
"relative/path",
|
|
"/double//slashes",
|
|
"/has/./dot",
|
|
"/has/dot/../dot",
|
|
"/trailing/slash/",
|
|
"/",
|
|
} {
|
|
err := Transport.ValidatePolicyConfigurationScope(scope)
|
|
assert.Error(t, err, scope)
|
|
}
|
|
}
|
|
|
|
func TestNewReference(t *testing.T) {
|
|
testNewReference(t, NewReference)
|
|
}
|
|
|
|
// testNewReference is a test shared for Transport.ParseReference and NewReference.
|
|
func testNewReference(t *testing.T, fn func(string) (types.ImageReference, error)) {
|
|
tmpDir := t.TempDir()
|
|
tmpFile := filepath.Join(tmpDir, "image.sif")
|
|
err := os.WriteFile(tmpFile, nil, 0600)
|
|
require.NoError(t, err)
|
|
|
|
for _, file := range []string{
|
|
"/dev/null",
|
|
tmpFile,
|
|
"relativepath",
|
|
tmpDir + "/thisdoesnotexist",
|
|
} {
|
|
ref, err := fn(file)
|
|
require.NoError(t, err, file)
|
|
sifRef, ok := ref.(sifReference)
|
|
require.True(t, ok)
|
|
assert.Equal(t, file, sifRef.file, file)
|
|
}
|
|
|
|
_, err = fn(tmpDir + "/thisparentdoesnotexist/something")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
// refToTempFile creates a temporary file and returns a reference to it.
|
|
// The caller should
|
|
//
|
|
// defer os.Remove(tmpFile)
|
|
func refToTempFile(t *testing.T) (ref types.ImageReference, tmpDir string) {
|
|
f, err := os.CreateTemp("", "sif-transport-test")
|
|
require.NoError(t, err)
|
|
tmpFile := f.Name()
|
|
err = f.Close()
|
|
require.NoError(t, err)
|
|
ref, err = NewReference(tmpFile)
|
|
require.NoError(t, err)
|
|
return ref, tmpFile
|
|
}
|
|
|
|
func TestReferenceTransport(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
assert.Equal(t, Transport, ref.Transport())
|
|
}
|
|
|
|
func TestReferenceStringWithinTransport(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
assert.Equal(t, tmpFile, ref.StringWithinTransport())
|
|
}
|
|
|
|
func TestReferenceDockerReference(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
assert.Nil(t, ref.DockerReference())
|
|
}
|
|
|
|
func TestReferencePolicyConfigurationIdentity(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
|
|
assert.Equal(t, tmpFile, ref.PolicyConfigurationIdentity())
|
|
// A non-canonical path. Test just one, the various other cases are
|
|
// tested in explicitfilepath.ResolvePathToFullyExplicit.
|
|
ref, err := NewReference("/./" + tmpFile)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, tmpFile, ref.PolicyConfigurationIdentity())
|
|
}
|
|
|
|
func TestReferencePolicyConfigurationNamespaces(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
// We don't really know enough to make a full equality test here.
|
|
ns := ref.PolicyConfigurationNamespaces()
|
|
require.NotNil(t, ns)
|
|
assert.NotEmpty(t, ns)
|
|
assert.Equal(t, filepath.Dir(tmpFile), ns[0])
|
|
|
|
// Test with a known path where the directory should exist. Test just one non-canonical
|
|
// path, the various other cases are tested in explicitfilepath.ResolvePathToFullyExplicit.
|
|
for _, path := range []string{"/usr/share/probablydoesnotexist.sif", "/usr/share/././probablydoesnoexist.sif"} {
|
|
_, err := os.Lstat(filepath.Dir(path))
|
|
require.NoError(t, err)
|
|
ref, err := NewReference(path)
|
|
require.NoError(t, err)
|
|
ns := ref.PolicyConfigurationNamespaces()
|
|
require.NotNil(t, ns)
|
|
assert.Equal(t, []string{"/usr/share", "/usr"}, ns)
|
|
}
|
|
|
|
// "/" as a corner case.
|
|
ref, err := NewReference("/")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, []string{}, ref.PolicyConfigurationNamespaces())
|
|
}
|
|
|
|
func TestReferenceNewImage(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
// A pretty pointless smoke test for now;
|
|
// we don't want to require every developer of c/image to have fakeroot etc. around.
|
|
_, err := ref.NewImage(context.Background(), nil)
|
|
assert.Error(t, err) // Empty file is not valid
|
|
}
|
|
|
|
func TestReferenceNewImageSource(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
// A pretty pointless smoke test for now;
|
|
// we don't want to require every developer of c/image to have fakeroot etc. around.
|
|
_, err := ref.NewImageSource(context.Background(), nil)
|
|
assert.Error(t, err) // Empty file is not valid
|
|
}
|
|
|
|
func TestReferenceNewImageDestination(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
_, err := ref.NewImageDestination(context.Background(), nil)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestReferenceDeleteImage(t *testing.T) {
|
|
ref, tmpFile := refToTempFile(t)
|
|
defer os.Remove(tmpFile)
|
|
err := ref.DeleteImage(context.Background(), nil)
|
|
assert.Error(t, err)
|
|
}
|