From b3a15e7288d6d09e8204ee93b67c64ec6accebdb Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Thu, 7 Jan 2021 17:13:26 -0500 Subject: [PATCH] integration test: use fedora-minimal for most manifest list tests Switch most of our tests that exercise reading, copying from, and inspecting tags that point to manifest lists from using docker.io/estesp/busybox to using registry.fedoraproject.org/fedora-minimal, which doesn't limit how often we can pull the images. Signed-off-by: Nalin Dahyabhai --- integration/copy_test.go | 93 ++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/integration/copy_test.go b/integration/copy_test.go index 8df7488e..a94264b6 100644 --- a/integration/copy_test.go +++ b/integration/copy_test.go @@ -31,6 +31,7 @@ const ( v2DockerRegistryURL = "localhost:5555" // Update also policy.json v2s1DockerRegistryURL = "localhost:5556" knownWindowsOnlyImage = "docker://mcr.microsoft.com/windows/nanoserver:1909" + knownListImage = "docker://registry.fedoraproject.org/fedora-minimal" // could have either ":latest" or "@sha256:..." appended ) type CopySuite struct { @@ -99,14 +100,14 @@ func (s *CopySuite) TestCopyWithManifestList(c *check.C) { dir, err := ioutil.TempDir("", "copy-manifest-list") c.Assert(err, check.IsNil) defer os.RemoveAll(dir) - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:latest", "dir:"+dir) + 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) - assertSkopeoSucceeds(c, "", "copy", "--all", "docker://estesp/busybox:latest", "dir:"+dir) + assertSkopeoSucceeds(c, "", "copy", "--all", knownListImage, "dir:"+dir) } func (s *CopySuite) TestCopyAllWithManifestListRoundTrip(c *check.C) { @@ -122,7 +123,7 @@ func (s *CopySuite) TestCopyAllWithManifestListRoundTrip(c *check.C) { dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - assertSkopeoSucceeds(c, "", "copy", "--all", "docker://estesp/busybox:latest", "oci:"+oci1) + assertSkopeoSucceeds(c, "", "copy", "--all", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--all", "oci:"+oci1, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "--all", "dir:"+dir1, "oci:"+oci2) assertSkopeoSucceeds(c, "", "copy", "--all", "oci:"+oci2, "dir:"+dir2) @@ -144,9 +145,9 @@ func (s *CopySuite) TestCopyAllWithManifestListConverge(c *check.C) { dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - assertSkopeoSucceeds(c, "", "copy", "--all", "docker://estesp/busybox:latest", "oci:"+oci1) + assertSkopeoSucceeds(c, "", "copy", "--all", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--all", "oci:"+oci1, "dir:"+dir1) - assertSkopeoSucceeds(c, "", "copy", "--all", "--format", "oci", "docker://estesp/busybox:latest", "dir:"+dir2) + assertSkopeoSucceeds(c, "", "copy", "--all", "--format", "oci", knownListImage, "dir:"+dir2) assertSkopeoSucceeds(c, "", "copy", "--all", "dir:"+dir2, "oci:"+oci2) assertDirImagesAreEqual(c, dir1, dir2) out := combinedOutputOfCommand(c, "diff", "-urN", oci1, oci2) @@ -166,9 +167,9 @@ func (s *CopySuite) TestCopyWithManifestListConverge(c *check.C) { dir2, err := ioutil.TempDir("", "copy-all-manifest-list-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:latest", "oci:"+oci1) + assertSkopeoSucceeds(c, "", "copy", knownListImage, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "--all", "oci:"+oci1, "dir:"+dir1) - assertSkopeoSucceeds(c, "", "copy", "--format", "oci", "docker://estesp/busybox:latest", "dir:"+dir2) + assertSkopeoSucceeds(c, "", "copy", "--format", "oci", knownListImage, "dir:"+dir2) assertSkopeoSucceeds(c, "", "copy", "--all", "dir:"+dir2, "oci:"+oci2) assertDirImagesAreEqual(c, dir1, dir2) out := combinedOutputOfCommand(c, "diff", "-urN", oci1, oci2) @@ -180,7 +181,7 @@ func (s *CopySuite) TestCopyAllWithManifestListStorageFails(c *check.C) { c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - assertSkopeoFails(c, `.*destination transport .* does not support copying multiple images as a group.*`, "copy", "--all", "docker://estesp/busybox:latest", "containers-storage:"+storage+"test") + assertSkopeoFails(c, `.*destination transport .* does not support copying multiple images as a group.*`, "copy", "--all", knownListImage, "containers-storage:"+storage+"test") } func (s *CopySuite) TestCopyWithManifestListStorage(c *check.C) { @@ -194,8 +195,8 @@ func (s *CopySuite) TestCopyWithManifestListStorage(c *check.C) { dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:latest", "containers-storage:"+storage+"test") - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox:latest", "dir:"+dir1) + assertSkopeoSucceeds(c, "", "copy", knownListImage, "containers-storage:"+storage+"test") + assertSkopeoSucceeds(c, "", "copy", knownListImage, "dir:"+dir1) assertSkopeoSucceeds(c, "", "copy", "containers-storage:"+storage+"test", "dir:"+dir2) runDecompressDirs(c, "", dir1, dir2) assertDirImagesAreEqual(c, dir1, dir2) @@ -212,9 +213,9 @@ func (s *CopySuite) TestCopyWithManifestListStorageMultiple(c *check.C) { dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-multiple-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - assertSkopeoSucceeds(c, "", "--override-arch", "amd64", "copy", "docker://estesp/busybox:latest", "containers-storage:"+storage+"test") - assertSkopeoSucceeds(c, "", "--override-arch", "arm64", "copy", "docker://estesp/busybox:latest", "containers-storage:"+storage+"test") - assertSkopeoSucceeds(c, "", "--override-arch", "arm64", "copy", "docker://estesp/busybox:latest", "dir:"+dir1) + 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) assertSkopeoSucceeds(c, "", "copy", "containers-storage:"+storage+"test", "dir:"+dir2) runDecompressDirs(c, "", dir1, dir2) assertDirImagesAreEqual(c, dir1, dir2) @@ -233,12 +234,12 @@ func (s *CopySuite) TestCopyWithManifestListDigest(c *check.C) { oci2, err := ioutil.TempDir("", "copy-manifest-list-digest-oci") c.Assert(err, check.IsNil) defer os.RemoveAll(oci2) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox@"+digest, "dir:"+dir1) - assertSkopeoSucceeds(c, "", "copy", "--all", "docker://estesp/busybox@"+digest, "dir:"+dir2) + assertSkopeoSucceeds(c, "", "copy", knownListImage+"@"+digest, "dir:"+dir1) + assertSkopeoSucceeds(c, "", "copy", "--all", knownListImage+"@"+digest, "dir:"+dir2) assertSkopeoSucceeds(c, "", "copy", "dir:"+dir1, "oci:"+oci1) assertSkopeoSucceeds(c, "", "copy", "dir:"+dir2, "oci:"+oci2) out := combinedOutputOfCommand(c, "diff", "-urN", oci1, oci2) @@ -256,13 +257,13 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigest(c *check.C) { dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) assertSkopeoSucceeds(c, "", "copy", "containers-storage:"+storage+"test@"+digest, "dir:"+dir1) - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox@"+digest, "dir:"+dir2) + assertSkopeoSucceeds(c, "", "copy", knownListImage+"@"+digest, "dir:"+dir2) runDecompressDirs(c, "", dir1, dir2) assertDirImagesAreEqual(c, dir1, dir2) } @@ -278,13 +279,13 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArches(c *check dir2, err := ioutil.TempDir("", "copy-manifest-list-storage-digest-dir") c.Assert(err, check.IsNil) defer os.RemoveAll(dir2) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) assertSkopeoSucceeds(c, "", "copy", "containers-storage:"+storage+"test@"+digest, "dir:"+dir1) - assertSkopeoSucceeds(c, "", "copy", "docker://estesp/busybox@"+digest, "dir:"+dir2) + assertSkopeoSucceeds(c, "", "copy", knownListImage+"@"+digest, "dir:"+dir2) runDecompressDirs(c, "", dir1, dir2) assertDirImagesAreEqual(c, dir1, dir2) } @@ -294,14 +295,14 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesBothUseLi c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() _, err = manifest.ListFromBlob([]byte(m), manifest.GuessMIMEType([]byte(m))) c.Assert(err, check.IsNil) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) - assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) assertSkopeoFails(c, `.*error reading manifest for image instance.*does not exist.*`, "--override-arch=amd64", "inspect", "containers-storage:"+storage+"test@"+digest) assertSkopeoFails(c, `.*error reading manifest for image instance.*does not exist.*`, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+digest) i2 := combinedOutputOfCommand(c, skopeoBinary, "--override-arch=arm64", "inspect", "--config", "containers-storage:"+storage+"test@"+digest) @@ -316,7 +317,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesFirstUses c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() @@ -326,8 +327,8 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesFirstUses c.Assert(err, check.IsNil) arm64Instance, err := list.ChooseInstance(&types.SystemContext{ArchitectureChoice: "arm64"}) c.Assert(err, check.IsNil) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) - assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", "docker://estesp/busybox@"+arm64Instance.String(), "containers-storage:"+storage+"test@"+arm64Instance.String()) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", knownListImage+"@"+arm64Instance.String(), "containers-storage:"+storage+"test@"+arm64Instance.String()) i1 := combinedOutputOfCommand(c, skopeoBinary, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+digest) var image1 imgspecv1.Image err = json.Unmarshal([]byte(i1), &image1) @@ -352,7 +353,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesSecondUse c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() @@ -362,8 +363,8 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesSecondUse c.Assert(err, check.IsNil) arm64Instance, err := list.ChooseInstance(&types.SystemContext{ArchitectureChoice: "arm64"}) c.Assert(err, check.IsNil) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox@"+amd64Instance.String(), "containers-storage:"+storage+"test@"+amd64Instance.String()) - assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage+"@"+amd64Instance.String(), "containers-storage:"+storage+"test@"+amd64Instance.String()) + assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) i1 := combinedOutputOfCommand(c, skopeoBinary, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+amd64Instance.String()) var image1 imgspecv1.Image err = json.Unmarshal([]byte(i1), &image1) @@ -388,7 +389,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesThirdUses c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() @@ -398,9 +399,9 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesThirdUses c.Assert(err, check.IsNil) arm64Instance, err := list.ChooseInstance(&types.SystemContext{ArchitectureChoice: "arm64"}) c.Assert(err, check.IsNil) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox@"+amd64Instance.String(), "containers-storage:"+storage+"test@"+amd64Instance.String()) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) - assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage+"@"+amd64Instance.String(), "containers-storage:"+storage+"test@"+amd64Instance.String()) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) assertSkopeoFails(c, `.*error reading manifest for image instance.*does not exist.*`, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+digest) i1 := combinedOutputOfCommand(c, skopeoBinary, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+amd64Instance.String()) var image1 imgspecv1.Image @@ -424,7 +425,7 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesTagAndDig c.Assert(err, check.IsNil) defer os.RemoveAll(storage) storage = fmt.Sprintf("[vfs@%s/root+%s/runroot]", storage, storage) - m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", "docker://estesp/busybox:latest") + m := combinedOutputOfCommand(c, skopeoBinary, "inspect", "--raw", knownListImage) manifestDigest, err := manifest.Digest([]byte(m)) c.Assert(err, check.IsNil) digest := manifestDigest.String() @@ -434,8 +435,8 @@ func (s *CopySuite) TestCopyWithManifestListStorageDigestMultipleArchesTagAndDig c.Assert(err, check.IsNil) arm64Instance, err := list.ChooseInstance(&types.SystemContext{ArchitectureChoice: "arm64"}) c.Assert(err, check.IsNil) - assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", "docker://estesp/busybox:latest", "containers-storage:"+storage+"test:latest") - assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", "docker://estesp/busybox@"+digest, "containers-storage:"+storage+"test@"+digest) + assertSkopeoSucceeds(c, "", "--override-arch=amd64", "copy", knownListImage, "containers-storage:"+storage+"test:latest") + assertSkopeoSucceeds(c, "", "--override-arch=arm64", "copy", knownListImage+"@"+digest, "containers-storage:"+storage+"test@"+digest) assertSkopeoFails(c, `.*error reading manifest for image instance.*does not exist.*`, "--override-arch=amd64", "inspect", "--config", "containers-storage:"+storage+"test@"+digest) i1 := combinedOutputOfCommand(c, skopeoBinary, "--override-arch=arm64", "inspect", "--config", "containers-storage:"+storage+"test:latest") var image1 imgspecv1.Image @@ -511,28 +512,28 @@ func (s *CopySuite) TestCopySimple(c *check.C) { // FIXME: It would be nice to use one of the local Docker registries instead of needing an Internet connection. // "pull": docker: → dir: - assertSkopeoSucceeds(c, "", "copy", "docker://busybox", "dir:"+dir1) + assertSkopeoSucceeds(c, "", "copy", "docker://k8s.gcr.io/pause", "dir:"+dir1) // "push": dir: → docker(v2s2): - assertSkopeoSucceeds(c, "", "--tls-verify=false", "--debug", "copy", "dir:"+dir1, ourRegistry+"busybox:unsigned") + assertSkopeoSucceeds(c, "", "--tls-verify=false", "--debug", "copy", "dir:"+dir1, ourRegistry+"pause:unsigned") // The result of pushing and pulling is an unmodified image. - assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", ourRegistry+"busybox:unsigned", "dir:"+dir2) + assertSkopeoSucceeds(c, "", "--tls-verify=false", "copy", ourRegistry+"pause:unsigned", "dir:"+dir2) out := combinedOutputOfCommand(c, "diff", "-urN", dir1, dir2) c.Assert(out, check.Equals, "") // docker v2s2 -> OCI image layout with image name // ociDest will be created by oci: if it doesn't exist // so don't create it here to exercise auto-creation - ociDest := "busybox-latest-image" - ociImgName := "busybox" + ociDest := "pause-latest-image" + ociImgName := "pause" defer os.RemoveAll(ociDest) - assertSkopeoSucceeds(c, "", "copy", "docker://busybox:latest", "oci:"+ociDest+":"+ociImgName) + assertSkopeoSucceeds(c, "", "copy", "docker://k8s.gcr.io/pause:latest", "oci:"+ociDest+":"+ociImgName) _, err = os.Stat(ociDest) c.Assert(err, check.IsNil) // docker v2s2 -> OCI image layout without image name - ociDest = "busybox-latest-noimage" + ociDest = "pause-latest-noimage" defer os.RemoveAll(ociDest) - assertSkopeoSucceeds(c, "", "copy", "docker://busybox:latest", "oci:"+ociDest) + assertSkopeoSucceeds(c, "", "copy", "docker://k8s.gcr.io/pause:latest", "oci:"+ociDest) _, err = os.Stat(ociDest) c.Assert(err, check.IsNil) }