@@ -18,18 +18,22 @@ package builder
18
18
19
19
import (
20
20
"fmt"
21
+ "strings"
21
22
"testing"
22
23
23
24
"gotest.tools/v3/assert"
24
25
25
- "github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
26
+ testhelpers "github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
26
27
"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"
27
30
)
28
31
29
32
func TestBuildContextWithOCILayout (t * testing.T ) {
33
+ nerdtest .Setup ()
34
+
30
35
testutil .RequiresBuild (t )
31
36
testutil .RegisterBuildCacheCleanup (t )
32
-
33
37
var dockerBuilderArgs []string
34
38
if testutil .IsDocker () {
35
39
// Default docker driver does not support OCI exporter.
@@ -38,48 +42,50 @@ func TestBuildContextWithOCILayout(t *testing.T) {
38
42
dockerBuilderArgs = []string {"buildx" , "--builder" , builderName }
39
43
}
40
44
41
- base := testutil .NewBase (t )
42
- imageName := testutil .Identifier (t )
43
- ociLayout := "parent"
44
- parentImageName := fmt .Sprintf ("%s-%s" , imageName , ociLayout )
45
-
46
- teardown := func () {
47
- base .Cmd ("rmi" , parentImageName , imageName ).Run ()
48
- }
49
- t .Cleanup (teardown )
50
- teardown ()
51
-
52
- dockerfile := fmt .Sprintf (`FROM %s
45
+ testCase := & test.Case {
46
+ Description : "Build context OCI layout" ,
47
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
48
+ helpers .Anyhow ("rmi" , fmt .Sprintf ("%s-parent" , data .Identifier ()))
49
+ },
50
+ Setup : func (data test.Data , helpers test.Helpers ) {
51
+ dockerfile := fmt .Sprintf (`FROM %s
53
52
LABEL layer=oci-layout-parent
54
53
CMD ["echo", "test-nerdctl-build-context-oci-layout-parent"]` , testutil .CommonImage )
55
- buildCtx := helpers .CreateBuildContext (t , dockerfile )
56
-
57
- tarPath := fmt .Sprintf ("%s/%s.tar" , buildCtx , ociLayout )
58
-
59
- // Create OCI archive from parent image.
60
- base .Cmd ("build" , buildCtx , "--tag" , parentImageName ).AssertOK ()
61
- base .Cmd ("image" , "save" , "--output" , tarPath , parentImageName ).AssertOK ()
62
54
63
- // Unpack OCI archive into OCI layout directory.
64
- ociLayoutDir := t .TempDir ()
65
- err := helpers .ExtractTarFile (ociLayoutDir , tarPath )
66
- assert .NilError (t , err )
67
-
68
- dockerfile = fmt .Sprintf (`FROM %s
69
- CMD ["echo", "test-nerdctl-build-context-oci-layout"]` , ociLayout )
70
- buildCtx = helpers .CreateBuildContext (t , dockerfile )
71
-
72
- var buildArgs = []string {}
73
- if testutil .IsDocker () {
74
- buildArgs = dockerBuilderArgs
75
- }
76
-
77
- buildArgs = append (buildArgs , "build" , buildCtx , fmt .Sprintf ("--build-context=%s=oci-layout://%s" , ociLayout , ociLayoutDir ), "--tag" , imageName )
78
- if testutil .IsDocker () {
79
- // Need to load the container image from the builder to be able to run it.
80
- buildArgs = append (buildArgs , "--load" )
55
+ // FIXME: replace with a generic file creation helper - search for all occurrences of temp file creation
56
+ buildCtx := testhelpers .CreateBuildContext (t , dockerfile )
57
+ tarPath := fmt .Sprintf ("%s/parent.tar" , buildCtx )
58
+
59
+ helpers .Ensure ("build" , buildCtx , "--tag" , fmt .Sprintf ("%s-parent" , data .Identifier ()))
60
+ helpers .Ensure ("image" , "save" , "--output" , tarPath , fmt .Sprintf ("%s-parent" , data .Identifier ()))
61
+ helpers .CustomCommand ("tar" , "Cxf" , data .TempDir (), tarPath ).Run (& test.Expected {})
62
+ },
63
+
64
+ Command : func (data test.Data , helpers test.Helpers ) test.Command {
65
+ dockerfile := `FROM parent
66
+ CMD ["echo", "test-nerdctl-build-context-oci-layout"]`
67
+ buildCtx := testhelpers .CreateBuildContext (t , dockerfile )
68
+ var cmd test.Command
69
+ if testutil .IsDocker () {
70
+ cmd = helpers .Command (dockerBuilderArgs ... )
71
+ } else {
72
+ cmd = helpers .Command ()
73
+ }
74
+ cmd .WithArgs ("build" , buildCtx , fmt .Sprintf ("--build-context=parent=oci-layout://%s" , data .TempDir ()), "--tag" , data .Identifier ())
75
+ if testutil .IsDocker () {
76
+ // Need to load the container image from the builder to be able to run it.
77
+ cmd .WithArgs ("--load" )
78
+ }
79
+ return cmd
80
+ },
81
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
82
+ return & test.Expected {
83
+ Output : func (stdout string , info string , t * testing.T ) {
84
+ assert .Assert (t , strings .Contains (helpers .Capture ("run" , "--rm" , data .Identifier ()), "test-nerdctl-build-context-oci-layout" ), info )
85
+ },
86
+ }
87
+ },
81
88
}
82
89
83
- base .Cmd (buildArgs ... ).AssertOK ()
84
- base .Cmd ("run" , "--rm" , imageName ).AssertOutContains ("test-nerdctl-build-context-oci-layout" )
90
+ testCase .Run (t )
85
91
}
0 commit comments