From f79cc8aedab9149120de8986a41225df29f2719e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Tue, 15 Mar 2022 22:09:56 +0100 Subject: [PATCH 1/4] Update to Go 1.14 and revendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > go mod tidy -go=1.14 > make vendor Signed-off-by: Miloslav Trmač --- go.mod | 2 +- vendor/modules.txt | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 4aa6b456..ebf8fa8e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/containers/skopeo -go 1.12 +go 1.14 require ( github.com/Microsoft/go-winio v0.5.2 // indirect diff --git a/vendor/modules.txt b/vendor/modules.txt index e5729a19..f0d8bb31 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2,6 +2,7 @@ github.com/BurntSushi/toml github.com/BurntSushi/toml/internal # github.com/Microsoft/go-winio v0.5.2 +## explicit github.com/Microsoft/go-winio github.com/Microsoft/go-winio/backuptar github.com/Microsoft/go-winio/pkg/guid @@ -39,6 +40,7 @@ github.com/cespare/xxhash/v2 # github.com/containerd/cgroups v1.0.3 github.com/containerd/cgroups/stats/v1 # github.com/containerd/containerd v1.6.1 +## explicit github.com/containerd/containerd/errdefs github.com/containerd/containerd/log github.com/containerd/containerd/platforms @@ -46,6 +48,7 @@ github.com/containerd/containerd/platforms github.com/containerd/stargz-snapshotter/estargz github.com/containerd/stargz-snapshotter/estargz/errorutil # github.com/containers/common v0.47.4 +## explicit github.com/containers/common/pkg/auth github.com/containers/common/pkg/capabilities github.com/containers/common/pkg/completion @@ -54,6 +57,7 @@ github.com/containers/common/pkg/report github.com/containers/common/pkg/report/camelcase github.com/containers/common/pkg/retry # github.com/containers/image/v5 v5.20.0 +## explicit github.com/containers/image/v5/copy github.com/containers/image/v5/directory github.com/containers/image/v5/directory/explicitfilepath @@ -105,6 +109,7 @@ github.com/containers/image/v5/version # github.com/containers/libtrust v0.0.0-20200511145503-9c3a6c22cd9a github.com/containers/libtrust # github.com/containers/ocicrypt v1.1.2 +## explicit github.com/containers/ocicrypt github.com/containers/ocicrypt/blockcipher github.com/containers/ocicrypt/config @@ -122,6 +127,7 @@ github.com/containers/ocicrypt/spec github.com/containers/ocicrypt/utils github.com/containers/ocicrypt/utils/keyprovider # github.com/containers/storage v1.38.2 +## explicit github.com/containers/storage github.com/containers/storage/drivers github.com/containers/storage/drivers/aufs @@ -183,6 +189,7 @@ github.com/docker/distribution/registry/client/transport github.com/docker/distribution/registry/storage/cache github.com/docker/distribution/registry/storage/cache/memory # github.com/docker/docker v20.10.13+incompatible +## explicit github.com/docker/docker/api github.com/docker/docker/api/types github.com/docker/docker/api/types/blkiodev @@ -213,6 +220,8 @@ github.com/docker/go-connections/tlsconfig github.com/docker/go-metrics # github.com/docker/go-units v0.4.0 github.com/docker/go-units +# github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 +## explicit # github.com/ghodss/yaml v1.0.0 github.com/ghodss/yaml # github.com/gogo/protobuf v1.3.2 @@ -244,6 +253,7 @@ github.com/inconshreveable/mousetrap # github.com/json-iterator/go v1.1.12 github.com/json-iterator/go # github.com/klauspost/compress v1.15.0 +## explicit github.com/klauspost/compress github.com/klauspost/compress/flate github.com/klauspost/compress/fse @@ -268,18 +278,22 @@ github.com/miekg/pkcs11 # github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible github.com/mistifyio/go-zfs # github.com/moby/sys/mountinfo v0.6.0 +## explicit github.com/moby/sys/mountinfo # github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd github.com/modern-go/concurrent # github.com/modern-go/reflect2 v1.0.2 github.com/modern-go/reflect2 # github.com/opencontainers/go-digest v1.0.0 +## explicit github.com/opencontainers/go-digest # github.com/opencontainers/image-spec v1.0.3-0.20211202193544-a5463b7f9c84 +## explicit github.com/opencontainers/image-spec/schema github.com/opencontainers/image-spec/specs-go github.com/opencontainers/image-spec/specs-go/v1 # github.com/opencontainers/image-tools v1.0.0-rc3 +## explicit github.com/opencontainers/image-tools/image # github.com/opencontainers/runc v1.1.0 github.com/opencontainers/runc/libcontainer/user @@ -295,6 +309,7 @@ github.com/opencontainers/selinux/pkg/pwalkdir github.com/ostreedev/ostree-go/pkg/glibobject github.com/ostreedev/ostree-go/pkg/otbuiltin # github.com/pkg/errors v0.9.1 +## explicit github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.0 github.com/pmezard/go-difflib/difflib @@ -316,20 +331,27 @@ github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util # github.com/rivo/uniseg v0.2.0 github.com/rivo/uniseg +# github.com/russross/blackfriday v2.0.0+incompatible +## explicit # github.com/sirupsen/logrus v1.8.1 +## explicit github.com/sirupsen/logrus # github.com/spf13/cobra v1.4.0 +## explicit github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 +## explicit github.com/spf13/pflag # github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 github.com/stefanberger/go-pkcs11uri # github.com/stretchr/testify v1.7.1 +## explicit github.com/stretchr/testify/assert github.com/stretchr/testify/require # github.com/sylabs/sif/v2 v2.3.2 github.com/sylabs/sif/v2/pkg/sif # github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 +## explicit github.com/syndtr/gocapability/capability # github.com/tchap/go-patricia v2.3.0+incompatible github.com/tchap/go-patricia/patricia @@ -375,6 +397,7 @@ golang.org/x/crypto/openpgp/packet golang.org/x/crypto/openpgp/s2k golang.org/x/crypto/pbkdf2 # golang.org/x/net v0.0.0-20220225172249-27dd8689420f +## explicit golang.org/x/net/context golang.org/x/net/http/httpguts golang.org/x/net/http2 @@ -388,6 +411,7 @@ golang.org/x/net/trace golang.org/x/sync/errgroup golang.org/x/sync/semaphore # golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 +## explicit golang.org/x/sys/execabs golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 @@ -401,6 +425,7 @@ golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm # google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 +## explicit google.golang.org/genproto/googleapis/rpc/status # google.golang.org/grpc v1.44.0 google.golang.org/grpc @@ -480,12 +505,14 @@ google.golang.org/protobuf/types/known/anypb google.golang.org/protobuf/types/known/durationpb google.golang.org/protobuf/types/known/timestamppb # gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c +## explicit gopkg.in/check.v1 # gopkg.in/square/go-jose.v2 v2.5.1 gopkg.in/square/go-jose.v2 gopkg.in/square/go-jose.v2/cipher gopkg.in/square/go-jose.v2/json # gopkg.in/yaml.v2 v2.4.0 +## explicit gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gopkg.in/yaml.v3 From 2019b79c7f3c244c5d9906d9041b5334b64c4778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Tue, 15 Mar 2022 23:53:59 +0100 Subject: [PATCH 2/4] Use check.C.MkDir() instead of manual ioutil.TempDir() calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This saves us at least 2 lines (error check, and cleanup) on every instance, or in some cases adds cleanup that we forgot. This is inspired by, but not directly related to, Go 1.15's addition of Testing.T.TempDir. NOTE: This might significantly increase the tests' disk space requirements; AFAICS the temporary directories are only cleaned up when a whole "suite finishes running. Signed-off-by: Miloslav Trmač --- integration/copy_test.go | 300 +++++++++--------------------------- integration/openshift.go | 9 +- integration/registry.go | 11 +- integration/signing_test.go | 16 +- integration/sync_test.go | 108 ++++--------- 5 files changed, 113 insertions(+), 331 deletions(-) diff --git a/integration/copy_test.go b/integration/copy_test.go index c3a55a5c..cd3bda8f 100644 --- a/integration/copy_test.go +++ b/integration/copy_test.go @@ -64,9 +64,7 @@ func (s *CopySuite) SetUpSuite(c *check.C) { s.registry = setupRegistryV2At(c, v2DockerRegistryURL, false, false) s.s1Registry = setupRegistryV2At(c, v2s1DockerRegistryURL, false, true) - gpgHome, err := ioutil.TempDir("", "skopeo-gpg") - c.Assert(err, check.IsNil) - s.gpgHome = gpgHome + s.gpgHome = c.MkDir() os.Setenv("GNUPGHOME", s.gpgHome) for _, key := range []string{"personal", "official"} { @@ -82,9 +80,6 @@ func (s *CopySuite) SetUpSuite(c *check.C) { } func (s *CopySuite) TearDownSuite(c *check.C) { - if s.gpgHome != "" { - os.RemoveAll(s.gpgHome) - } if s.registry != nil { s.registry.tearDown(c) } @@ -97,32 +92,20 @@ func (s *CopySuite) TearDownSuite(c *check.C) { } func (s *CopySuite) TestCopyWithManifestList(c *check.C) { - dir, err := ioutil.TempDir("", "copy-manifest-list") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir) + dir := c.MkDir() assertSkopeoSucceeds(c, "", "copy", knownListImage, "dir:"+dir) } func (s *CopySuite) TestCopyAllWithManifestList(c *check.C) { - dir, err := ioutil.TempDir("", "copy-all-manifest-list") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir) + dir := c.MkDir() assertSkopeoSucceeds(c, "", "copy", "--all", knownListImage, "dir:"+dir) } func (s *CopySuite) TestCopyAllWithManifestListRoundTrip(c *check.C) { - oci1, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci1) - oci2, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci2) - dir1, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + oci1 := c.MkDir() + oci2 := c.MkDir() + dir1 := c.MkDir() + dir2 := c.MkDir() assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", "oci:"+oci1, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", "dir:"+dir1, "oci:"+oci2) @@ -133,18 +116,10 @@ func (s *CopySuite) TestCopyAllWithManifestListRoundTrip(c *check.C) { } func (s *CopySuite) TestCopyAllWithManifestListConverge(c *check.C) { - oci1, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci1) - oci2, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci2) - dir1, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + oci1 := c.MkDir() + oci2 := c.MkDir() + dir1 := c.MkDir() + dir2 := c.MkDir() assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", "oci:"+oci1, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", "--format", "oci", knownListImage, "dir:"+dir2) @@ -155,9 +130,7 @@ func (s *CopySuite) TestCopyAllWithManifestListConverge(c *check.C) { } func (s *CopySuite) TestCopyNoneWithManifestList(c *check.C) { - dir1, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) + dir1 := c.MkDir() assertSkopeoSucceeds(c, "", "copy", "--multi-arch=index-only", knownListImage, "dir:"+dir1) manifestPath := filepath.Join(dir1, "manifest.json") @@ -170,18 +143,10 @@ func (s *CopySuite) TestCopyNoneWithManifestList(c *check.C) { } func (s *CopySuite) TestCopyWithManifestListConverge(c *check.C) { - oci1, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci1) - oci2, err := ioutil.TempDir("", "copy-all-manifest-list-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci2) - dir1, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + oci1 := c.MkDir() + oci2 := c.MkDir() + dir1 := c.MkDir() + dir2 := c.MkDir() assertSkopeoSucceeds(c, "", "copy", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--multi-arch=all", "oci:"+oci1, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "--format", "oci", knownListImage, "dir:"+dir2) @@ -192,24 +157,16 @@ func (s *CopySuite) TestCopyWithManifestListConverge(c *check.C) { } func (s *CopySuite) TestCopyAllWithManifestListStorageFails(c *check.C) { - storage, err := ioutil.TempDir("", "copy-storage") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) assertSkopeoFails(c, `.*destination transport .* does not support copying multiple images as a group.*`, "copy", "--multi-arch=all", knownListImage, "containers-storage:"+storage+"test") } func (s *CopySuite) TestCopyWithManifestListStorage(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - dir1, err := ioutil.TempDir("", "copy-manifest-list-storage-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() assertSkopeoSucceeds(c, "", "copy", knownListImage, "containers-storage:"+storage+"test") assertSkopeoSucceeds(c, "", "copy", knownListImage, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "containers-storage:"+storage+"test", "dir:"+dir2) @@ -218,16 +175,10 @@ func (s *CopySuite) TestCopyWithManifestListStorage(c *check.C) { } func (s *CopySuite) TestCopyWithManifestListStorageMultiple(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-multiple") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - dir1, err := ioutil.TempDir("", "copy-manifest-list-storage-multiple-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-multiple-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() assertSkopeoSucceeds(c, "", "--override-arch", "amd64", "copy", knownListImage, "containers-storage:"+storage+"test") assertSkopeoSucceeds(c, "", "--override-arch", "arm64", "copy", knownListImage, "containers-storage:"+storage+"test") assertSkopeoSucceeds(c, "", "--override-arch", "arm64", "copy", knownListImage, "dir:"+dir1) @@ -237,18 +188,10 @@ func (s *CopySuite) TestCopyWithManifestListStorageMultiple(c *check.C) { } func (s *CopySuite) TestCopyWithManifestListDigest(c *check.C) { - dir1, err := ioutil.TempDir("", "copy-manifest-list-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-manifest-list-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) - oci1, err := ioutil.TempDir("", "copy-manifest-list-digest-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci1) - oci2, err := ioutil.TempDir("", "copy-manifest-list-digest-oci") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci2) + dir1 := c.MkDir() + dir2 := c.MkDir() + oci1 := c.MkDir() + oci2 := c.MkDir() m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) @@ -262,12 +205,8 @@ func (s *CopySuite) TestCopyWithManifestListDigest(c *check.C) { } func (s *CopySuite) TestCopyWithDigestfileOutput(c *check.C) { - tempdir, err := ioutil.TempDir("", "tempdir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tempdir) - dir1, err := ioutil.TempDir("", "copy-manifest-list-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) + tempdir := c.MkDir() + dir1 := c.MkDir() digestOutPath := filepath.Join(tempdir, "digest.txt") assertSkopeoSucceeds(c, "", "copy", "--digestfile="+digestOutPath, knownListImage, "dir:"+dir1) readDigest, err := ioutil.ReadFile(digestOutPath) @@ -277,16 +216,10 @@ func (s *CopySuite) TestCopyWithDigestfileOutput(c *check.C) { } func (s *CopySuite) TestCopyWithManifestListStorageDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - dir1, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) @@ -299,16 +232,10 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigest(c *check.C) { } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArches(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - dir1, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) @@ -321,9 +248,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArches(c *check } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesBothUseListDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-multiple-arches-both") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) @@ -343,9 +268,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesBothUseLi } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesFirstUsesListDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-multiple-arches-first") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) @@ -379,9 +302,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesFirstUses } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesSecondUsesListDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-multiple-arches-second") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) @@ -415,9 +336,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesSecondUse } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesThirdUsesListDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-multiple-arches-third") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) @@ -451,9 +370,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesThirdUses } func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesTagAndDigest(c *check.C) { - storage, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-multiple-arches-tag-digest") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) @@ -496,28 +413,20 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesTagAndDig } func (s *CopySuite) TestCopyFailsWhenImageOSDoesNotMatchRuntimeOS(c *check.C) { - storage, err := ioutil.TempDir("", "copy-fails-image-does-not-match-runtime") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) assertSkopeoFails(c, `.*no image found in manifest list for architecture .*, variant .*, OS .*`, "copy", knownWindowsOnlyImage, "containers-storage:"+storage+"test") } func (s *CopySuite) TestCopySucceedsWhenImageDoesNotMatchRuntimeButWeOverride(c *check.C) { - storage, err := ioutil.TempDir("", "copy-succeeds-image-does-not-match-runtime-but-override") - c.Assert(err, check.IsNil) - defer os.RemoveAll(storage) + storage := c.MkDir() storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) assertSkopeoSucceeds(c, "", "--override-os=windows", "--override-arch=amd64", "copy", knownWindowsOnlyImage, "containers-storage:"+storage+"test") } func (s *CopySuite) TestCopySimpleAtomicRegistry(c *check.C) { - dir1, err := ioutil.TempDir("", "copy-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-2") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. // "pull": docker: → dir: @@ -533,12 +442,8 @@ func (s *CopySuite) TestCopySimpleAtomicRegistry(c *check.C) { func (s *CopySuite) TestCopySimple(c *check.C) { const ourRegistry = "docker://" + v2DockerRegistryURL + "/" - dir1, err := ioutil.TempDir("", "copy-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "copy-2") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. // "pull": docker: → dir: @@ -557,7 +462,7 @@ func (s *CopySuite) TestCopySimple(c *check.C) { ociImgName := "pause" defer os.RemoveAll(ociDest) assertSkopeoSucceeds(c, "", "copy", "docker://k8s.gcr.io/pause:latest", "oci:"+ociDest+":"+ociImgName) - _, err = os.Stat(ociDest) + _, err := os.Stat(ociDest) c.Assert(err, check.IsNil) // docker v2s2 -> OCI image layout without image name @@ -569,31 +474,14 @@ func (s *CopySuite) TestCopySimple(c *check.C) { } func (s *CopySuite) TestCopyEncryption(c *check.C) { - - originalImageDir, err := ioutil.TempDir("", "copy-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(originalImageDir) - encryptedImgDir, err := ioutil.TempDir("", "copy-2") - c.Assert(err, check.IsNil) - defer os.RemoveAll(encryptedImgDir) - decryptedImgDir, err := ioutil.TempDir("", "copy-3") - c.Assert(err, check.IsNil) - defer os.RemoveAll(decryptedImgDir) - keysDir, err := ioutil.TempDir("", "copy-4") - c.Assert(err, check.IsNil) - defer os.RemoveAll(keysDir) - undecryptedImgDir, err := ioutil.TempDir("", "copy-5") - c.Assert(err, check.IsNil) - defer os.RemoveAll(undecryptedImgDir) - multiLayerImageDir, err := ioutil.TempDir("", "copy-6") - c.Assert(err, check.IsNil) - defer os.RemoveAll(multiLayerImageDir) - partiallyEncryptedImgDir, err := ioutil.TempDir("", "copy-7") - c.Assert(err, check.IsNil) - defer os.RemoveAll(partiallyEncryptedImgDir) - partiallyDecryptedImgDir, err := ioutil.TempDir("", "copy-8") - c.Assert(err, check.IsNil) - defer os.RemoveAll(partiallyDecryptedImgDir) + originalImageDir := c.MkDir() + encryptedImgDir := c.MkDir() + decryptedImgDir := c.MkDir() + keysDir := c.MkDir() + undecryptedImgDir := c.MkDir() + multiLayerImageDir := c.MkDir() + partiallyEncryptedImgDir := c.MkDir() + partiallyDecryptedImgDir := c.MkDir() // Create RSA key pair privateKey, err := rsa.GenerateKey(rand.Reader, 4096) @@ -745,12 +633,8 @@ func assertSchema1DirImagesAreEqualExceptNames(c *check.C, dir1, ref1, dir2, ref // Streaming (skopeo copy) func (s *CopySuite) TestCopyStreaming(c *check.C) { - dir1, err := ioutil.TempDir("", "streaming-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) - dir2, err := ioutil.TempDir("", "streaming-2") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir2) + dir1 := c.MkDir() + dir2 := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. // streaming: docker: → atomic: @@ -770,12 +654,8 @@ func (s *CopySuite) TestCopyStreaming(c *check.C) { func (s *CopySuite) TestCopyOCIRoundTrip(c *check.C) { const ourRegistry = "docker://" + v2DockerRegistryURL + "/" - oci1, err := ioutil.TempDir("", "oci-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci1) - oci2, err := ioutil.TempDir("", "oci-2") - c.Assert(err, check.IsNil) - defer os.RemoveAll(oci2) + oci1 := c.MkDir() + oci2 := c.MkDir() // Docker -> OCI assertSkopeoSucceeds(c, "", "--tls-verify=false", "--debug", "copy", testFQIN, "oci:"+oci1+":latest") @@ -798,7 +678,7 @@ func (s *CopySuite) TestCopyOCIRoundTrip(c *check.C) { // Verify using the upstream OCI image validator, this should catch most // non-compliance errors. DO NOT REMOVE THIS TEST UNLESS IT'S ABSOLUTELY // NECESSARY. - err = image.ValidateLayout(oci1, nil, logger) + err := image.ValidateLayout(oci1, nil, logger) c.Assert(err, check.IsNil) err = image.ValidateLayout(oci2, nil, logger) c.Assert(err, check.IsNil) @@ -820,9 +700,7 @@ func (s *CopySuite) TestCopySignatures(c *check.C) { c.Skip(fmt.Sprintf("Signing not supported: %v", err)) } - dir, err := ioutil.TempDir("", "signatures-dest") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir) + dir := c.MkDir() dirDest := "dir:" + dir policy := fileFromFixture(c, "fixtures/policy.json", map[string]string{"@keydir@": s.gpgHome}) @@ -876,9 +754,7 @@ func (s *CopySuite) TestCopyDirSignatures(c *check.C) { c.Skip(fmt.Sprintf("Signing not supported: %v", err)) } - topDir, err := ioutil.TempDir("", "dir-signatures-top") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() topDirDest := "dir:" + topDir for _, suffix := range []string{"/dir1", "/dir2", "/restricted/personal", "/restricted/official", "/restricted/badidentity", "/dest"} { @@ -921,9 +797,7 @@ func (s *CopySuite) TestCopyDirSignatures(c *check.C) { func (s *CopySuite) TestCopyCompression(c *check.C) { const uncompresssedLayerFile = "160d823fdc48e62f97ba62df31e55424f8f5eb6b679c865eec6e59adfe304710" - topDir, err := ioutil.TempDir("", "compression-top") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() for i, t := range []struct{ fixture, remote string }{ {"uncompressed-image-s1", "docker://" + v2DockerRegistryURL + "/compression/compression:s1"}, @@ -982,9 +856,7 @@ func (s *CopySuite) TestCopyDockerSigstore(c *check.C) { const ourRegistry = "docker://" + v2DockerRegistryURL + "/" - tmpDir, err := ioutil.TempDir("", "signatures-sigstore") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() copyDest := filepath.Join(tmpDir, "dest") err = os.Mkdir(copyDest, 0755) c.Assert(err, check.IsNil) @@ -1050,9 +922,7 @@ func (s *CopySuite) TestCopyAtomicExtension(c *check.C) { c.Skip(fmt.Sprintf("Signing not supported: %v", err)) } - topDir, err := ioutil.TempDir("", "atomic-extension") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() for _, subdir := range []string{"dirAA", "dirAD", "dirDA", "dirDD", "registries.d"} { err := os.MkdirAll(filepath.Join(topDir, subdir), 0755) c.Assert(err, check.IsNil) @@ -1102,9 +972,7 @@ func (s *CopySuite) TestCopyAtomicExtension(c *check.C) { // copyWithSignedIdentity creates a copy of an unsigned image, adding a signature for an unrelated identity // This should be easier than using standalone-sign. func copyWithSignedIdentity(c *check.C, src, dest, signedIdentity, signBy, registriesDir string) { - topDir, err := ioutil.TempDir("", "copyWithSignedIdentity") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() signingDir := filepath.Join(topDir, "signing-temp") assertSkopeoSucceeds(c, "", "copy", "--src-tls-verify=false", src, "dir:"+signingDir) @@ -1126,9 +994,7 @@ func (s *CopySuite) TestCopyVerifyingMirroredSignatures(c *check.C) { c.Skip(fmt.Sprintf("Signing not supported: %v", err)) } - topDir, err := ioutil.TempDir("", "mirrored-signatures") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() registriesDir := filepath.Join(topDir, "registries.d") // An empty directory to disable sigstore use dirDest := "dir:" + filepath.Join(topDir, "unused-dest") @@ -1189,9 +1055,7 @@ func (s *CopySuite) TestCopyVerifyingMirroredSignatures(c *check.C) { func (s *SkopeoSuite) TestCopySrcWithAuth(c *check.C) { assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "--dest-creds=testuser:testpassword", testFQIN, fmt.Sprintf("docker://%s/busybox:latest", s.regV2WithAuth.url)) - dir1, err := ioutil.TempDir("", "copy-1") - c.Assert(err, check.IsNil) - defer os.RemoveAll(dir1) + dir1 := c.MkDir() assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "--src-creds=testuser:testpassword", fmt.Sprintf("docker://%s/busybox:latest", s.regV2WithAuth.url), "dir:"+dir1) } @@ -1205,9 +1069,7 @@ func (s *SkopeoSuite) TestCopySrcAndDestWithAuth(c *check.C) { } func (s *CopySuite) TestCopyNoPanicOnHTTPResponseWithoutTLSVerifyFalse(c *check.C) { - topDir, err := ioutil.TempDir("", "no-panic-on-https-response-without-tls-verify-false") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() const ourRegistry = "docker://" + v2DockerRegistryURL + "/" @@ -1223,9 +1085,7 @@ func (s *CopySuite) TestCopySchemaConversion(c *check.C) { } func (s *CopySuite) TestCopyManifestConversion(c *check.C) { - topDir, err := ioutil.TempDir("", "manifest-conversion") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() srcDir := filepath.Join(topDir, "source") destDir1 := filepath.Join(topDir, "dest1") destDir2 := filepath.Join(topDir, "dest2") @@ -1249,18 +1109,14 @@ func (s *CopySuite) TestCopyManifestConversion(c *check.C) { } func (s *CopySuite) TestCopyPreserveDigests(c *check.C) { - topDir, err := ioutil.TempDir("", "preserve-digests") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() assertSkopeoSucceeds(c, "", "copy", knownListImage, "--multi-arch=all", "--preserve-digests", "dir:"+topDir) assertSkopeoFails(c, ".*Instructed to preserve digests.*", "copy", knownListImage, "--multi-arch=all", "--preserve-digests", "--format=oci", "dir:"+topDir) } func (s *CopySuite) testCopySchemaConversionRegistries(c *check.C, schema1Registry, schema2Registry string) { - topDir, err := ioutil.TempDir("", "schema-conversion") - c.Assert(err, check.IsNil) - defer os.RemoveAll(topDir) + topDir := c.MkDir() for _, subdir := range []string{"input1", "input2", "dest2"} { err := os.MkdirAll(filepath.Join(topDir, subdir), 0755) c.Assert(err, check.IsNil) @@ -1294,16 +1150,14 @@ func (s *CopySuite) testCopySchemaConversionRegistries(c *check.C, schema1Regist const regConfFixture = "./fixtures/registries.conf" func (s *SkopeoSuite) TestSuccessCopySrcWithMirror(c *check.C) { - dir, err := ioutil.TempDir("", "copy-mirror") - c.Assert(err, check.IsNil) + dir := c.MkDir() assertSkopeoSucceeds(c, "", "--registries-conf="+regConfFixture, "copy", "docker://mirror.invalid/busybox", "dir:"+dir) } func (s *SkopeoSuite) TestFailureCopySrcWithMirrorsUnavailable(c *check.C) { - dir, err := ioutil.TempDir("", "copy-mirror") - c.Assert(err, check.IsNil) + dir := c.MkDir() // .invalid domains are, per RFC 6761, supposed to result in NXDOMAIN. // With systemd-resolved (used only via NSS?), we instead seem to get “Temporary failure in name resolution” @@ -1312,16 +1166,14 @@ func (s *SkopeoSuite) TestFailureCopySrcWithMirrorsUnavailable(c *check.C) { } func (s *SkopeoSuite) TestSuccessCopySrcWithMirrorAndPrefix(c *check.C) { - dir, err := ioutil.TempDir("", "copy-mirror") - c.Assert(err, check.IsNil) + dir := c.MkDir() assertSkopeoSucceeds(c, "", "--registries-conf="+regConfFixture, "copy", "docker://gcr.invalid/foo/bar/busybox", "dir:"+dir) } func (s *SkopeoSuite) TestFailureCopySrcWithMirrorAndPrefixUnavailable(c *check.C) { - dir, err := ioutil.TempDir("", "copy-mirror") - c.Assert(err, check.IsNil) + dir := c.MkDir() // .invalid domains are, per RFC 6761, supposed to result in NXDOMAIN. // With systemd-resolved (used only via NSS?), we instead seem to get “Temporary failure in name resolution” diff --git a/integration/openshift.go b/integration/openshift.go index 0264e9f1..521f5f39 100644 --- a/integration/openshift.go +++ b/integration/openshift.go @@ -33,10 +33,7 @@ type openshiftCluster struct { // in isolated test environment. func startOpenshiftCluster(c *check.C) *openshiftCluster { cluster := &openshiftCluster{} - - dir, err := ioutil.TempDir("", "openshift-cluster") - c.Assert(err, check.IsNil) - cluster.workingDir = dir + cluster.workingDir = c.MkDir() cluster.startMaster(c) cluster.prepareRegistryConfig(c) @@ -262,10 +259,6 @@ func (cluster *openshiftCluster) tearDown(c *check.C) { // so we couldn’t check just for that. This is running in a container anyway… _ = cluster.processes[i].Process.Kill() } - if cluster.workingDir != "" { - err := os.RemoveAll(cluster.workingDir) - c.Assert(err, check.IsNil) - } if cluster.dockerDir != "" { err := os.RemoveAll(cluster.dockerDir) c.Assert(err, check.IsNil) diff --git a/integration/registry.go b/integration/registry.go index e2ec22c5..56f88d32 100644 --- a/integration/registry.go +++ b/integration/registry.go @@ -20,7 +20,6 @@ const ( type testRegistryV2 struct { cmd *exec.Cmd url string - dir string username string password string email string @@ -45,10 +44,7 @@ func setupRegistryV2At(c *check.C, url string, auth, schema1 bool) *testRegistry } func newTestRegistryV2At(c *check.C, url string, auth, schema1 bool) (*testRegistryV2, error) { - tmp, err := ioutil.TempDir("", "registry-test-") - if err != nil { - return nil, err - } + tmp := c.MkDir() template := `version: 0.1 loglevel: debug storage: @@ -86,7 +82,6 @@ http: return nil, err } if _, err := fmt.Fprintf(config, template, tmp, url, htpasswd); err != nil { - os.RemoveAll(tmp) return nil, err } @@ -98,7 +93,6 @@ http: cmd := exec.Command(binary, confPath) consumeAndLogOutputs(c, fmt.Sprintf("registry-%s", url), cmd) if err := cmd.Start(); err != nil { - os.RemoveAll(tmp) if os.IsNotExist(err) { c.Skip(err.Error()) } @@ -107,7 +101,6 @@ http: return &testRegistryV2{ cmd: cmd, url: url, - dir: tmp, username: username, password: password, email: email, @@ -130,6 +123,4 @@ func (t *testRegistryV2) tearDown(c *check.C) { // It’s undocumented what Kill() returns if the process has terminated, // so we couldn’t check just for that. This is running in a container anyway… _ = t.cmd.Process.Kill() - err := os.RemoveAll(t.dir) - c.Assert(err, check.IsNil) } diff --git a/integration/signing_test.go b/integration/signing_test.go index 0b4e2f0b..97e4e08b 100644 --- a/integration/signing_test.go +++ b/integration/signing_test.go @@ -21,7 +21,6 @@ func init() { } type SigningSuite struct { - gpgHome string fingerprint string } @@ -40,25 +39,18 @@ func (s *SigningSuite) SetUpSuite(c *check.C) { _, err := exec.LookPath(skopeoBinary) c.Assert(err, check.IsNil) - s.gpgHome, err = ioutil.TempDir("", "skopeo-gpg") - c.Assert(err, check.IsNil) - os.Setenv("GNUPGHOME", s.gpgHome) + gpgHome := c.MkDir() + os.Setenv("GNUPGHOME", gpgHome) - runCommandWithInput(c, "Key-Type: RSA\nName-Real: Testing user\n%no-protection\n%commit\n", gpgBinary, "--homedir", s.gpgHome, "--batch", "--gen-key") + runCommandWithInput(c, "Key-Type: RSA\nName-Real: Testing user\n%no-protection\n%commit\n", gpgBinary, "--homedir", gpgHome, "--batch", "--gen-key") - lines, err := exec.Command(gpgBinary, "--homedir", s.gpgHome, "--with-colons", "--no-permission-warning", "--fingerprint").Output() + lines, err := exec.Command(gpgBinary, "--homedir", gpgHome, "--with-colons", "--no-permission-warning", "--fingerprint").Output() c.Assert(err, check.IsNil) s.fingerprint, err = findFingerprint(lines) c.Assert(err, check.IsNil) } func (s *SigningSuite) TearDownSuite(c *check.C) { - if s.gpgHome != "" { - err := os.RemoveAll(s.gpgHome) - c.Assert(err, check.IsNil) - } - s.gpgHome = "" - os.Unsetenv("GNUPGHOME") } diff --git a/integration/sync_test.go b/integration/sync_test.go index d7102c17..c9ff0073 100644 --- a/integration/sync_test.go +++ b/integration/sync_test.go @@ -40,7 +40,6 @@ func init() { type SyncSuite struct { cluster *openshiftCluster registry *testRegistryV2 - gpgHome string } func (s *SyncSuite) SetUpSuite(c *check.C) { @@ -74,10 +73,8 @@ func (s *SyncSuite) SetUpSuite(c *check.C) { // FIXME: Set up TLS for the docker registry port instead of using "--tls-verify=false" all over the place. s.registry = setupRegistryV2At(c, v2DockerRegistryURL, registryAuth, registrySchema1) - gpgHome, err := ioutil.TempDir("", "skopeo-gpg") - c.Assert(err, check.IsNil) - s.gpgHome = gpgHome - os.Setenv("GNUPGHOME", s.gpgHome) + gpgHome := c.MkDir() + os.Setenv("GNUPGHOME", gpgHome) for _, key := range []string{"personal", "official"} { batchInput := fmt.Sprintf("Key-Type: RSA\nName-Real: Test key - %s\nName-email: %s@example.com\n%%no-protection\n%%commit\n", @@ -85,7 +82,7 @@ func (s *SyncSuite) SetUpSuite(c *check.C) { runCommandWithInput(c, batchInput, gpgBinary, "--batch", "--gen-key") out := combinedOutputOfCommand(c, gpgBinary, "--armor", "--export", fmt.Sprintf("%s@example.com", key)) - err := ioutil.WriteFile(filepath.Join(s.gpgHome, fmt.Sprintf("%s-pubkey.gpg", key)), + err := ioutil.WriteFile(filepath.Join(gpgHome, fmt.Sprintf("%s-pubkey.gpg", key)), []byte(out), 0600) c.Assert(err, check.IsNil) } @@ -96,9 +93,6 @@ func (s *SyncSuite) TearDownSuite(c *check.C) { return } - if s.gpgHome != "" { - os.RemoveAll(s.gpgHome) - } if s.registry != nil { s.registry.tearDown(c) } @@ -108,9 +102,7 @@ func (s *SyncSuite) TearDownSuite(c *check.C) { } func (s *SyncSuite) TestDocker2DirTagged(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableTaggedImage @@ -136,9 +128,7 @@ func (s *SyncSuite) TestDocker2DirTagged(c *check.C) { } func (s *SyncSuite) TestDocker2DirTaggedAll(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableTaggedManifestList @@ -164,16 +154,14 @@ func (s *SyncSuite) TestDocker2DirTaggedAll(c *check.C) { } func (s *SyncSuite) TestPreserveDigests(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableTaggedManifestList // copy docker => dir assertSkopeoSucceeds(c, "", "copy", "--all", "--preserve-digests", "docker://"+image, "dir:"+tmpDir) - _, err = os.Stat(path.Join(tmpDir, "manifest.json")) + _, err := os.Stat(path.Join(tmpDir, "manifest.json")) c.Assert(err, check.IsNil) assertSkopeoFails(c, ".*Instructed to preserve digests.*", "copy", "--all", "--preserve-digests", "--format=oci", "docker://"+image, "dir:"+tmpDir) @@ -186,8 +174,7 @@ func (s *SyncSuite) TestScoped(c *check.C) { c.Assert(err, check.IsNil) imagePath := imageRef.DockerReference().String() - dir1, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) + dir1 := c.MkDir() assertSkopeoSucceeds(c, "", "sync", "--src", "docker", "--dest", "dir", image, dir1) _, err = os.Stat(path.Join(dir1, path.Base(imagePath), "manifest.json")) c.Assert(err, check.IsNil) @@ -195,8 +182,6 @@ func (s *SyncSuite) TestScoped(c *check.C) { assertSkopeoSucceeds(c, "", "sync", "--scoped", "--src", "docker", "--dest", "dir", image, dir1) _, err = os.Stat(path.Join(dir1, imagePath, "manifest.json")) c.Assert(err, check.IsNil) - - os.RemoveAll(dir1) } func (s *SyncSuite) TestDirIsNotOverwritten(c *check.C) { @@ -210,8 +195,7 @@ func (s *SyncSuite) TestDirIsNotOverwritten(c *check.C) { assertSkopeoSucceeds(c, "", "copy", "--dest-tls-verify=false", "docker://"+image, "docker://"+path.Join(v2DockerRegistryURL, reference.Path(imageRef.DockerReference()))) //sync upstream image to dir, not scoped - dir1, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) + dir1 := c.MkDir() assertSkopeoSucceeds(c, "", "sync", "--src", "docker", "--dest", "dir", image, dir1) _, err = os.Stat(path.Join(dir1, path.Base(imagePath), "manifest.json")) c.Assert(err, check.IsNil) @@ -226,14 +210,10 @@ func (s *SyncSuite) TestDirIsNotOverwritten(c *check.C) { assertSkopeoSucceeds(c, "", "sync", "--scoped", "--src-tls-verify=false", "--src", "docker", "--dest", "dir", path.Join(v2DockerRegistryURL, reference.Path(imageRef.DockerReference())), dir1) _, err = os.Stat(path.Join(dir1, imagePath, "manifest.json")) c.Assert(err, check.IsNil) - os.RemoveAll(dir1) } func (s *SyncSuite) TestDocker2DirUntagged(c *check.C) { - - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableRepo @@ -255,9 +235,7 @@ func (s *SyncSuite) TestDocker2DirUntagged(c *check.C) { } func (s *SyncSuite) TestYamlUntagged(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") image := pullableRepo @@ -321,9 +299,7 @@ func (s *SyncSuite) TestYamlUntagged(c *check.C) { } func (s *SyncSuite) TestYamlRegex2Dir(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") yamlConfig := ` @@ -336,7 +312,7 @@ k8s.gcr.io: c.Assert(nTags, check.Not(check.Equals), 0) yamlFile := path.Join(tmpDir, "registries.yaml") - err = ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) + err := ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) c.Assert(err, check.IsNil) assertSkopeoSucceeds(c, "", "sync", "--scoped", "--src", "yaml", "--dest", "dir", yamlFile, dir1) @@ -356,9 +332,7 @@ k8s.gcr.io: } func (s *SyncSuite) TestYamlDigest2Dir(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") yamlConfig := ` @@ -368,7 +342,7 @@ k8s.gcr.io: - sha256:59eec8837a4d942cc19a52b8c09ea75121acc38114a2c68b98983ce9356b8610 ` yamlFile := path.Join(tmpDir, "registries.yaml") - err = ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) + err := ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) c.Assert(err, check.IsNil) assertSkopeoSucceeds(c, "", "sync", "--scoped", "--src", "yaml", "--dest", "dir", yamlFile, dir1) @@ -388,9 +362,7 @@ k8s.gcr.io: } func (s *SyncSuite) TestYaml2Dir(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") yamlConfig := ` @@ -421,7 +393,7 @@ quay.io: c.Assert(nTags, check.Not(check.Equals), 0) yamlFile := path.Join(tmpDir, "registries.yaml") - err = ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) + err := ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) c.Assert(err, check.IsNil) assertSkopeoSucceeds(c, "", "sync", "--scoped", "--src", "yaml", "--dest", "dir", yamlFile, dir1) @@ -442,9 +414,7 @@ quay.io: func (s *SyncSuite) TestYamlTLSVerify(c *check.C) { const localRegURL = "docker://" + v2DockerRegistryURL + "/" - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") image := pullableRepoWithLatestTag tag := "latest" @@ -486,7 +456,7 @@ func (s *SyncSuite) TestYamlTLSVerify(c *check.C) { for _, cfg := range testCfg { yamlConfig := fmt.Sprintf(yamlTemplate, v2DockerRegistryURL, cfg.tlsVerify, image, tag) yamlFile := path.Join(tmpDir, "registries.yaml") - err = ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) + err := ioutil.WriteFile(yamlFile, []byte(yamlConfig), 0644) c.Assert(err, check.IsNil) cfg.checker(c, cfg.msg, "sync", "--scoped", "--src", "yaml", "--dest", "dir", yamlFile, dir1) @@ -497,9 +467,7 @@ func (s *SyncSuite) TestYamlTLSVerify(c *check.C) { } func (s *SyncSuite) TestSyncManifestOutput(c *check.C) { - tmpDir, err := ioutil.TempDir("", "sync-manifest-output") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() destDir1 := filepath.Join(tmpDir, "dest1") destDir2 := filepath.Join(tmpDir, "dest2") @@ -519,9 +487,7 @@ func (s *SyncSuite) TestSyncManifestOutput(c *check.C) { func (s *SyncSuite) TestDocker2DockerTagged(c *check.C) { const localRegURL = "docker://" + v2DockerRegistryURL + "/" - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableTaggedImage @@ -552,15 +518,13 @@ func (s *SyncSuite) TestDocker2DockerTagged(c *check.C) { func (s *SyncSuite) TestDir2DockerTagged(c *check.C) { const localRegURL = "docker://" + v2DockerRegistryURL + "/" - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. image := pullableRepoWithLatestTag dir1 := path.Join(tmpDir, "dir1") - err = os.Mkdir(dir1, 0755) + err := os.Mkdir(dir1, 0755) c.Assert(err, check.IsNil) dir2 := path.Join(tmpDir, "dir2") err = os.Mkdir(dir2, 0755) @@ -592,9 +556,7 @@ func (s *SyncSuite) TestDir2DockerTagged(c *check.C) { } func (s *SyncSuite) TestFailsWithDir2Dir(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() dir1 := path.Join(tmpDir, "dir1") dir2 := path.Join(tmpDir, "dir2") @@ -604,9 +566,7 @@ func (s *SyncSuite) TestFailsWithDir2Dir(c *check.C) { } func (s *SyncSuite) TestFailsNoSourceImages(c *check.C) { - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() assertSkopeoFails(c, ".*No images to sync found in .*", "sync", "--scoped", "--dest-tls-verify=false", "--src", "dir", "--dest", "docker", tmpDir, v2DockerRegistryURL) @@ -618,9 +578,7 @@ func (s *SyncSuite) TestFailsNoSourceImages(c *check.C) { func (s *SyncSuite) TestFailsWithDockerSourceNoRegistry(c *check.C) { const regURL = "google.com/namespace/imagename" - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() //untagged assertSkopeoFails(c, ".*invalid status code from registry 404.*", @@ -633,9 +591,7 @@ func (s *SyncSuite) TestFailsWithDockerSourceNoRegistry(c *check.C) { func (s *SyncSuite) TestFailsWithDockerSourceUnauthorized(c *check.C) { const repo = "privateimagenamethatshouldnotbepublic" - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() //untagged assertSkopeoFails(c, ".*Registry disallows tag list retrieval.*", @@ -648,9 +604,7 @@ func (s *SyncSuite) TestFailsWithDockerSourceUnauthorized(c *check.C) { func (s *SyncSuite) TestFailsWithDockerSourceNotExisting(c *check.C) { repo := path.Join(v2DockerRegistryURL, "imagedoesnotexist") - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - defer os.RemoveAll(tmpDir) + tmpDir := c.MkDir() //untagged assertSkopeoFails(c, ".*invalid status code from registry 404.*", @@ -663,9 +617,9 @@ func (s *SyncSuite) TestFailsWithDockerSourceNotExisting(c *check.C) { func (s *SyncSuite) TestFailsWithDirSourceNotExisting(c *check.C) { // Make sure the dir does not exist! - tmpDir, err := ioutil.TempDir("", "skopeo-sync-test") - c.Assert(err, check.IsNil) - err = os.RemoveAll(tmpDir) + tmpDir := c.MkDir() + tmpDir = filepath.Join(tmpDir, "this-does-not-exist") + err := os.RemoveAll(tmpDir) c.Assert(err, check.IsNil) _, err = os.Stat(path.Join(tmpDir)) c.Check(os.IsNotExist(err), check.Equals, true) From 6a2f38d66c42d7160d62922fc1540f0399dc05a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Tue, 15 Mar 2022 23:55:43 +0100 Subject: [PATCH 3/4] Formally record that we require Go 1.15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We already do in practice: > vendor/golang.org/x/net/http2/transport.go:417:45: undefined: os.ErrDeadlineExceeded so make that official. Signed-off-by: Miloslav Trmač --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ebf8fa8e..5be726c4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/containers/skopeo -go 1.14 +go 1.15 require ( github.com/Microsoft/go-winio v0.5.2 // indirect From c819bc17544d3cc7b3c86c697ad82d47d0823cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Wed, 16 Mar 2022 01:11:44 +0100 Subject: [PATCH 4/4] Update the command to install golint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miloslav Trmač --- .cirrus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index 21302d28..0d591abf 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -90,7 +90,7 @@ osx_task: export PATH=$GOPATH/bin:$PATH brew update brew install gpgme go go-md2man - go get -u golang.org/x/lint/golint + go install golang.org/x/lint/golint@latest test_script: | export PATH=$GOPATH/bin:$PATH go version