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 diff --git a/go.mod b/go.mod index 4aa6b456..5be726c4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/containers/skopeo -go 1.12 +go 1.15 require ( github.com/Microsoft/go-winio v0.5.2 // indirect 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) 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