@@ -19,10 +19,14 @@ package container
1919import (
2020 "testing"
2121
22+ "gotest.tools/v3/assert"
23+
2224 "github.com/containerd/nerdctl/mod/tigron/expect"
2325 "github.com/containerd/nerdctl/mod/tigron/require"
2426 "github.com/containerd/nerdctl/mod/tigron/test"
27+ "github.com/containerd/nerdctl/mod/tigron/tig"
2528
29+ "github.com/containerd/nerdctl/v2/pkg/inspecttypes/native"
2630 "github.com/containerd/nerdctl/v2/pkg/testutil"
2731 "github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
2832)
@@ -86,3 +90,52 @@ func TestCommit(t *testing.T) {
8690
8791 testCase .Run (t )
8892}
93+
94+ func TestZstdCommit (t * testing.T ) {
95+ testCase := nerdtest .Setup ()
96+ testCase .Require = require .All (
97+ // FIXME: Docker does not support compression
98+ require .Not (nerdtest .Docker ),
99+ nerdtest .ContainerdVersionV2 ,
100+ nerdtest .CGroup ,
101+ )
102+ testCase .Cleanup = func (data test.Data , helpers test.Helpers ) {
103+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
104+ helpers .Anyhow ("rmi" , "-f" , data .Identifier ("image" ))
105+ }
106+ testCase .Setup = func (data test.Data , helpers test.Helpers ) {
107+ identifier := data .Identifier ()
108+ helpers .Ensure ("run" , "-d" , "--name" , identifier , testutil .CommonImage , "sleep" , nerdtest .Infinity )
109+ nerdtest .EnsureContainerStarted (helpers , identifier )
110+ helpers .Ensure ("exec" , identifier , "sh" , "-euxc" , `echo hello-test-commit > /foo` )
111+ helpers .Ensure ("commit" , identifier , data .Identifier ("image" ), "--compression=zstd" )
112+ data .Labels ().Set ("image" , data .Identifier ("image" ))
113+ }
114+
115+ testCase .SubTests = []* test.Case {
116+ {
117+ Description : "verify zstd has been used" ,
118+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
119+ return helpers .Command ("image" , "inspect" , "--mode=native" , data .Labels ().Get ("image" ))
120+ },
121+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
122+ return & test.Expected {
123+ ExitCode : 0 ,
124+ Output : expect .JSON ([]native.Image {}, func (images []native.Image , s string , t tig.T ) {
125+ assert .Equal (t , len (images ), 1 )
126+ assert .Equal (helpers .T (), images [0 ].Manifest .Layers [len (images [0 ].Manifest .Layers )- 1 ].MediaType , "application/vnd.docker.image.rootfs.diff.tar.zstd" )
127+ }),
128+ }
129+ },
130+ },
131+ {
132+ Description : "verify the image is working" ,
133+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
134+ return helpers .Command ("run" , "--rm" , data .Labels ().Get ("image" ), "sh" , "-c" , "--" , "cat /foo" )
135+ },
136+ Expected : test .Expects (0 , nil , expect .Equals ("hello-test-commit\n " )),
137+ },
138+ }
139+
140+ testCase .Run (t )
141+ }
0 commit comments