Skip to content

Commit 4451d75

Browse files
committed
Migrate image tests
Signed-off-by: apostasie <[email protected]>
1 parent 157d183 commit 4451d75

15 files changed

+1642
-1025
lines changed

cmd/nerdctl/image/image_convert_linux_test.go

Lines changed: 107 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -20,63 +20,125 @@ import (
2020
"fmt"
2121
"testing"
2222

23-
"gotest.tools/v3/icmd"
24-
25-
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
2623
"github.com/containerd/nerdctl/v2/pkg/testutil"
24+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
25+
"github.com/containerd/nerdctl/v2/pkg/testutil/test"
2726
"github.com/containerd/nerdctl/v2/pkg/testutil/testregistry"
2827
)
2928

30-
func TestImageConvertNydus(t *testing.T) {
31-
testutil.RequireExecutable(t, "nydus-image")
32-
testutil.DockerIncompatible(t)
29+
func TestImageConvert(t *testing.T) {
30+
nerdtest.Setup()
3331

34-
base := testutil.NewBase(t)
35-
t.Parallel()
32+
testCase := &test.Case{
33+
Description: "Test image conversion",
34+
Require: test.Require(
35+
test.Not(test.Windows),
36+
test.Not(nerdtest.Docker),
37+
),
38+
Setup: func(data test.Data, helpers test.Helpers) {
39+
helpers.Ensure("pull", testutil.CommonImage)
40+
},
41+
SubTests: []*test.Case{
42+
{
43+
Description: "esgz",
44+
Cleanup: func(data test.Data, helpers test.Helpers) {
45+
helpers.Anyhow("rmi", data.Identifier("converted-image"))
46+
},
47+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
48+
return helpers.Command("image", "convert", "--oci", "--estargz",
49+
testutil.CommonImage, data.Identifier("converted-image"))
50+
},
51+
Expected: test.Expects(0, nil, nil),
52+
},
53+
{
54+
Description: "nydus",
55+
Require: test.Require(
56+
test.Binary("nydus-image"),
57+
),
58+
Cleanup: func(data test.Data, helpers test.Helpers) {
59+
helpers.Anyhow("rmi", data.Identifier("converted-image"))
60+
},
61+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
62+
return helpers.Command("image", "convert", "--oci", "--nydus",
63+
testutil.CommonImage, data.Identifier("converted-image"))
64+
},
65+
Expected: test.Expects(0, nil, nil),
66+
},
67+
{
68+
Description: "zstd",
69+
Cleanup: func(data test.Data, helpers test.Helpers) {
70+
helpers.Anyhow("rmi", data.Identifier("converted-image"))
71+
},
72+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
73+
return helpers.Command("image", "convert", "--oci", "--zstd", "--zstd-compression-level", "3",
74+
testutil.CommonImage, data.Identifier("converted-image"))
75+
},
76+
Expected: test.Expects(0, nil, nil),
77+
},
78+
{
79+
Description: "zstdchunked",
80+
Cleanup: func(data test.Data, helpers test.Helpers) {
81+
helpers.Anyhow("rmi", data.Identifier("converted-image"))
82+
},
83+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
84+
return helpers.Command("image", "convert", "--oci", "--zstdchunked", "--zstdchunked-compression-level", "3",
85+
testutil.CommonImage, data.Identifier("converted-image"))
86+
},
87+
Expected: test.Expects(0, nil, nil),
88+
},
89+
},
90+
}
3691

37-
convertedImage := testutil.Identifier(t) + ":nydus"
38-
base.Cmd("rmi", convertedImage).Run()
39-
base.Cmd("pull", testutil.CommonImage).AssertOK()
40-
base.Cmd("image", "convert", "--nydus", "--oci",
41-
testutil.CommonImage, convertedImage).AssertOK()
42-
defer base.Cmd("rmi", convertedImage).Run()
92+
testCase.Run(t)
4393

44-
// use `nydusify` check whether the convertd nydus image is valid
94+
}
4595

46-
// skip if rootless
47-
if rootlessutil.IsRootless() {
48-
t.Skip("Nydusify check is not supported rootless mode.")
49-
}
96+
func TestImageConvertNydusVerify(t *testing.T) {
97+
nerdtest.Setup()
5098

51-
// skip if nydusify and nydusd are not installed
52-
testutil.RequireExecutable(t, "nydusify")
53-
testutil.RequireExecutable(t, "nydusd")
99+
const remoteImageKey = "remoteImageKey"
54100

55-
// setup local docker registry
56-
registry := testregistry.NewWithNoAuth(base, 0, false)
57-
remoteImage := fmt.Sprintf("%s:%d/nydusd-image:test", "localhost", registry.Port)
58-
t.Cleanup(func() {
59-
base.Cmd("rmi", remoteImage).Run()
60-
registry.Cleanup(nil)
61-
})
101+
var registry *testregistry.RegistryServer
62102

63-
base.Cmd("tag", convertedImage, remoteImage).AssertOK()
64-
base.Cmd("push", remoteImage).AssertOK()
65-
nydusifyCmd := testutil.Cmd{
66-
Cmd: icmd.Command(
67-
"nydusify",
68-
"check",
69-
"--source",
70-
testutil.CommonImage,
71-
"--target",
72-
remoteImage,
73-
"--source-insecure",
74-
"--target-insecure",
103+
testCase := &test.Case{
104+
Description: "TestImageConvertNydusVerify",
105+
Require: test.Require(
106+
test.Linux,
107+
test.Binary("nydus-image"),
108+
test.Binary("nydusify"),
109+
test.Binary("nydusd"),
110+
test.Not(nerdtest.Docker),
111+
nerdtest.RootFul,
75112
),
76-
Base: base,
113+
Setup: func(data test.Data, helpers test.Helpers) {
114+
helpers.Ensure("pull", testutil.CommonImage)
115+
base := testutil.NewBase(t)
116+
registry = testregistry.NewWithNoAuth(base, 0, false)
117+
data.Set(remoteImageKey, fmt.Sprintf("%s:%d/nydusd-image:test", "localhost", registry.Port))
118+
helpers.Ensure("image", "convert", "--nydus", "--oci", testutil.CommonImage, data.Identifier("converted-image"))
119+
helpers.Ensure("tag", data.Identifier("converted-image"), data.Get(remoteImageKey))
120+
helpers.Ensure("push", data.Get(remoteImageKey))
121+
},
122+
Cleanup: func(data test.Data, helpers test.Helpers) {
123+
helpers.Anyhow("rmi", data.Identifier("converted-image"))
124+
if registry != nil {
125+
registry.Cleanup(nil)
126+
helpers.Anyhow("rmi", data.Get(remoteImageKey))
127+
}
128+
},
129+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
130+
return helpers.Custom("nydusify",
131+
"check",
132+
"--source",
133+
testutil.CommonImage,
134+
"--target",
135+
data.Get(remoteImageKey),
136+
"--source-insecure",
137+
"--target-insecure",
138+
)
139+
},
140+
Expected: test.Expects(0, nil, nil),
77141
}
78142

79-
// nydus is creating temporary files - make sure we are in a proper location for that
80-
nydusifyCmd.Cmd.Dir = base.T.TempDir()
81-
nydusifyCmd.AssertOK()
143+
testCase.Run(t)
82144
}

cmd/nerdctl/image/image_convert_test.go

Lines changed: 0 additions & 70 deletions
This file was deleted.

cmd/nerdctl/image/image_encrypt_linux_test.go

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,65 @@ package image
1818

1919
import (
2020
"fmt"
21+
"strings"
2122
"testing"
2223

23-
"github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
24+
"gotest.tools/v3/assert"
25+
26+
testhelpers "github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
2427
"github.com/containerd/nerdctl/v2/pkg/testutil"
28+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
29+
"github.com/containerd/nerdctl/v2/pkg/testutil/test"
2530
"github.com/containerd/nerdctl/v2/pkg/testutil/testregistry"
2631
)
2732

2833
func TestImageEncryptJWE(t *testing.T) {
29-
testutil.RequiresBuild(t)
30-
testutil.DockerIncompatible(t)
31-
keyPair := helpers.NewJWEKeyPair(t)
32-
base := testutil.NewBase(t)
33-
tID := testutil.Identifier(t)
34-
reg := testregistry.NewWithNoAuth(base, 0, false)
35-
36-
defer keyPair.Cleanup()
37-
defer reg.Cleanup(nil)
38-
39-
base.Cmd("pull", testutil.CommonImage).AssertOK()
40-
encryptImageRef := fmt.Sprintf("127.0.0.1:%d/%s:encrypted", reg.Port, tID)
41-
base.Cmd("image", "encrypt", "--recipient=jwe:"+keyPair.Pub, testutil.CommonImage, encryptImageRef).AssertOK()
42-
base.Cmd("image", "inspect", "--mode=native", "--format={{len .Index.Manifests}}", encryptImageRef).AssertOutExactly("1\n")
43-
base.Cmd("image", "inspect", "--mode=native", "--format={{json .Manifest.Layers}}", encryptImageRef).AssertOutContains("org.opencontainers.image.enc.keys.jwe")
44-
base.Cmd("push", encryptImageRef).AssertOK()
45-
46-
defer base.Cmd("rmi", encryptImageRef).Run()
47-
48-
// remove all local images (in the nerdctl-test namespace), to ensure that we do not have blobs of the original image.
49-
helpers.RmiAll(base)
50-
base.Cmd("pull", encryptImageRef).AssertFail() // defaults to --unpack=true, and fails due to missing prv key
51-
base.Cmd("pull", "--unpack=false", encryptImageRef).AssertOK()
52-
decryptImageRef := tID + ":decrypted"
53-
defer base.Cmd("rmi", decryptImageRef).Run()
54-
base.Cmd("image", "decrypt", "--key="+keyPair.Pub, encryptImageRef, decryptImageRef).AssertFail() // decryption needs prv key, not pub key
55-
base.Cmd("image", "decrypt", "--key="+keyPair.Prv, encryptImageRef, decryptImageRef).AssertOK()
34+
nerdtest.Setup()
35+
36+
var registry *testregistry.RegistryServer
37+
var keyPair *testhelpers.JweKeyPair
38+
39+
const remoteImageKey = "remoteImageKey"
40+
41+
testCase := &test.Case{
42+
Require: test.Require(
43+
test.Linux,
44+
test.Not(nerdtest.Docker),
45+
// This test needs to rmi the common image
46+
nerdtest.Private,
47+
),
48+
Cleanup: func(data test.Data, helpers test.Helpers) {
49+
if registry != nil {
50+
registry.Cleanup(nil)
51+
keyPair.Cleanup()
52+
helpers.Anyhow("rmi", "-f", data.Get(remoteImageKey))
53+
}
54+
helpers.Anyhow("rmi", "-f", data.Identifier("decrypted"))
55+
},
56+
Setup: func(data test.Data, helpers test.Helpers) {
57+
base := testutil.NewBase(t)
58+
registry = testregistry.NewWithNoAuth(base, 0, false)
59+
keyPair = testhelpers.NewJWEKeyPair(t)
60+
helpers.Ensure("pull", testutil.CommonImage)
61+
encryptImageRef := fmt.Sprintf("127.0.0.1:%d/%s:encrypted", registry.Port, data.Identifier())
62+
helpers.Ensure("image", "encrypt", "--recipient=jwe:"+keyPair.Pub, testutil.CommonImage, encryptImageRef)
63+
inspector := helpers.Capture("image", "inspect", "--mode=native", "--format={{len .Index.Manifests}}", encryptImageRef)
64+
assert.Equal(t, inspector, "1\n")
65+
inspector = helpers.Capture("image", "inspect", "--mode=native", "--format={{json .Manifest.Layers}}", encryptImageRef)
66+
assert.Assert(t, strings.Contains(inspector, "org.opencontainers.image.enc.keys.jwe"))
67+
helpers.Ensure("push", encryptImageRef)
68+
helpers.Anyhow("rmi", "-f", encryptImageRef)
69+
helpers.Anyhow("rmi", "-f", testutil.CommonImage)
70+
data.Set(remoteImageKey, encryptImageRef)
71+
},
72+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
73+
helpers.Fail("pull", data.Get(remoteImageKey))
74+
helpers.Ensure("pull", "--unpack=false", data.Get(remoteImageKey))
75+
helpers.Fail("image", "decrypt", "--key="+keyPair.Pub, data.Get(remoteImageKey), data.Identifier("decrypted")) // decryption needs prv key, not pub key
76+
return helpers.Command("image", "decrypt", "--key="+keyPair.Prv, data.Get(remoteImageKey), data.Identifier("decrypted"))
77+
},
78+
Expected: test.Expects(0, nil, nil),
79+
}
80+
81+
testCase.Run(t)
5682
}

0 commit comments

Comments
 (0)