mirror of
https://github.com/containers/skopeo.git
synced 2025-07-31 06:31:06 +00:00
Allow updated names when comparing schema1 images
The new version of containers/image will update the name and tag fields when pushing to schema1; so accept that before we update, so that tests keep working. For now, just ignore the name/tag fields, so that both the current and updated versions of containers/image are acceptable; we will tighten that after the update.
This commit is contained in:
parent
6f23c88e84
commit
22965c443f
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -103,9 +104,9 @@ func (s *CopySuite) TestCopySimpleAtomicRegistry(c *check.C) {
|
|||||||
assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:amd64", "dir:"+dir1)
|
assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:amd64", "dir:"+dir1)
|
||||||
// "push": dir: → atomic:
|
// "push": dir: → atomic:
|
||||||
assertSkopeoSucceeds(c, "", "--tls-verify=false", "--debug", "copy", "dir:"+dir1, "atomic:localhost:5000/myns/unsigned:unsigned")
|
assertSkopeoSucceeds(c, "", "--tls-verify=false", "--debug", "copy", "dir:"+dir1, "atomic:localhost:5000/myns/unsigned:unsigned")
|
||||||
// The result of pushing and pulling is an unmodified image.
|
// The result of pushing and pulling is an equivalent image, except for schema1 embedded names.
|
||||||
assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "atomic:localhost:5000/myns/unsigned:unsigned", "dir:"+dir2)
|
assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "atomic:localhost:5000/myns/unsigned:unsigned", "dir:"+dir2)
|
||||||
assertDirImagesAreEqual(c, dir1, dir2)
|
assertSchema1DirImagesAreEqualExceptNames(c, dir1, dir2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// The most basic (skopeo copy) use:
|
// The most basic (skopeo copy) use:
|
||||||
@ -158,6 +159,29 @@ func assertDirImagesAreEqual(c *check.C, dir1, dir2 string) {
|
|||||||
c.Assert(out, check.Equals, "")
|
c.Assert(out, check.Equals, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether schema1 dir: images in dir1 and dir2 are equal, ignoring schema1 signatures and the embedded path/tag values.
|
||||||
|
func assertSchema1DirImagesAreEqualExceptNames(c *check.C, dir1, dir2 string) {
|
||||||
|
// The manifests may have different JWS signatures and names; so, unmarshal and delete these elements.
|
||||||
|
manifests := []map[string]interface{}{}
|
||||||
|
for _, dir := range []string{dir1, dir2} {
|
||||||
|
manifestPath := filepath.Join(dir, "manifest.json")
|
||||||
|
m, err := ioutil.ReadFile(manifestPath)
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
data := map[string]interface{}{}
|
||||||
|
err = json.Unmarshal(m, &data)
|
||||||
|
c.Assert(err, check.IsNil)
|
||||||
|
c.Assert(data["schemaVersion"], check.Equals, float64(1))
|
||||||
|
for _, key := range []string{"signatures", "name", "tag"} {
|
||||||
|
delete(data, key)
|
||||||
|
}
|
||||||
|
manifests = append(manifests, data)
|
||||||
|
}
|
||||||
|
c.Assert(manifests[0], check.DeepEquals, manifests[1])
|
||||||
|
// Then compare the rest file by file.
|
||||||
|
out := combinedOutputOfCommand(c, "diff", "-urN", "-x", "manifest.json", dir1, dir2)
|
||||||
|
c.Assert(out, check.Equals, "")
|
||||||
|
}
|
||||||
|
|
||||||
// Streaming (skopeo copy)
|
// Streaming (skopeo copy)
|
||||||
func (s *CopySuite) TestCopyStreaming(c *check.C) {
|
func (s *CopySuite) TestCopyStreaming(c *check.C) {
|
||||||
dir1, err := ioutil.TempDir("", "streaming-1")
|
dir1, err := ioutil.TempDir("", "streaming-1")
|
||||||
@ -173,7 +197,7 @@ func (s *CopySuite) TestCopyStreaming(c *check.C) {
|
|||||||
// Compare (copies of) the original and the copy:
|
// Compare (copies of) the original and the copy:
|
||||||
assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:amd64", "dir:"+dir1)
|
assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:amd64", "dir:"+dir1)
|
||||||
assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "atomic:localhost:5000/myns/unsigned:streaming", "dir:"+dir2)
|
assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", "atomic:localhost:5000/myns/unsigned:streaming", "dir:"+dir2)
|
||||||
assertDirImagesAreEqual(c, dir1, dir2)
|
assertSchema1DirImagesAreEqualExceptNames(c, dir1, dir2)
|
||||||
// FIXME: Also check pushing to docker://
|
// FIXME: Also check pushing to docker://
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user