1
0
mirror of https://github.com/containers/image.git synced 2025-04-18 19:44:05 +03:00
image/sif/transport_test.go
Miloslav Trmač b3098b338e Reformat with Go 1.19's gofmt
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>
2022-08-10 20:38:52 +02:00

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