@@ -3,33 +3,60 @@ package main
3
3
import (
4
4
"bytes"
5
5
"os"
6
- "runtime"
7
6
"testing"
8
7
9
8
"github.com/docker/cli/cli/command"
9
+ "github.com/docker/cli/cli/flags"
10
10
"github.com/docker/cli/internal/test/output"
11
11
"gotest.tools/v3/assert"
12
12
"gotest.tools/v3/fs"
13
13
)
14
14
15
15
var pluginFilename = "docker-buildx"
16
16
17
- func init () {
18
- if runtime .GOOS == "windows" {
19
- pluginFilename = pluginFilename + ".exe"
20
- }
17
+ func TestBuildWithBuildx (t * testing.T ) {
18
+ dir := fs .NewDir (t , t .Name (),
19
+ fs .WithFile (pluginFilename , `#!/bin/sh
20
+ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortDescription":"Build with BuildKit"}'` , fs .WithMode (0777 )),
21
+ )
22
+ defer dir .Remove ()
23
+
24
+ var b bytes.Buffer
25
+
26
+ t .Setenv ("DOCKER_CONTEXT" , "default" )
27
+ dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (& b ))
28
+ assert .NilError (t , err )
29
+ assert .NilError (t , dockerCli .Initialize (flags .NewClientOptions ()))
30
+ dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
31
+
32
+ tcmd := newDockerCommand (dockerCli )
33
+ tcmd .SetArgs ([]string {"build" , "." })
34
+
35
+ cmd , args , err := tcmd .HandleGlobalFlags ()
36
+ assert .NilError (t , err )
37
+
38
+ var envs []string
39
+ args , os .Args , envs , err = processBuilder (dockerCli , cmd , args , os .Args )
40
+ assert .NilError (t , err )
41
+ assert .DeepEqual (t , []string {builderDefaultPlugin , "build" , "." }, args )
42
+ assert .DeepEqual (t , []string {"BUILDX_BUILDER=default" }, envs )
21
43
}
22
44
23
- func TestBuildWithBuilder (t * testing.T ) {
45
+ func TestBuildWithBuildxAndBuilder (t * testing.T ) {
46
+ t .Setenv ("BUILDX_BUILDER" , "mybuilder" )
47
+
24
48
dir := fs .NewDir (t , t .Name (),
25
49
fs .WithFile (pluginFilename , `#!/bin/sh
26
50
echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortDescription":"Build with BuildKit"}'` , fs .WithMode (0777 )),
27
51
)
28
52
defer dir .Remove ()
29
53
30
54
var b bytes.Buffer
55
+
56
+ t .Setenv ("DOCKER_CONTEXT" , "default" )
31
57
dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (& b ))
32
58
assert .NilError (t , err )
59
+ assert .NilError (t , dockerCli .Initialize (flags .NewClientOptions ()))
33
60
dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
34
61
35
62
tcmd := newDockerCommand (dockerCli )
@@ -38,9 +65,11 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD
38
65
cmd , args , err := tcmd .HandleGlobalFlags ()
39
66
assert .NilError (t , err )
40
67
41
- args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
68
+ var envs []string
69
+ args , os .Args , envs , err = processBuilder (dockerCli , cmd , args , os .Args )
42
70
assert .NilError (t , err )
43
71
assert .DeepEqual (t , []string {builderDefaultPlugin , "build" , "." }, args )
72
+ assert .Check (t , len (envs ) == 0 )
44
73
}
45
74
46
75
func TestBuildkitDisabled (t * testing.T ) {
@@ -55,6 +84,7 @@ func TestBuildkitDisabled(t *testing.T) {
55
84
56
85
dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
57
86
assert .NilError (t , err )
87
+ assert .NilError (t , dockerCli .Initialize (flags .NewClientOptions ()))
58
88
dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
59
89
60
90
tcmd := newDockerCommand (dockerCli )
@@ -63,9 +93,11 @@ func TestBuildkitDisabled(t *testing.T) {
63
93
cmd , args , err := tcmd .HandleGlobalFlags ()
64
94
assert .NilError (t , err )
65
95
66
- args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
96
+ var envs []string
97
+ args , os .Args , envs , err = processBuilder (dockerCli , cmd , args , os .Args )
67
98
assert .NilError (t , err )
68
99
assert .DeepEqual (t , []string {"build" , "." }, args )
100
+ assert .Check (t , len (envs ) == 0 )
69
101
70
102
output .Assert (t , b .String (), map [int ]func (string ) error {
71
103
0 : output .Suffix ("DEPRECATED: The legacy builder is deprecated and will be removed in a future release." ),
@@ -82,6 +114,7 @@ func TestBuilderBroken(t *testing.T) {
82
114
83
115
dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
84
116
assert .NilError (t , err )
117
+ assert .NilError (t , dockerCli .Initialize (flags .NewClientOptions ()))
85
118
dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
86
119
87
120
tcmd := newDockerCommand (dockerCli )
@@ -90,9 +123,11 @@ func TestBuilderBroken(t *testing.T) {
90
123
cmd , args , err := tcmd .HandleGlobalFlags ()
91
124
assert .NilError (t , err )
92
125
93
- args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
126
+ var envs []string
127
+ args , os .Args , envs , err = processBuilder (dockerCli , cmd , args , os .Args )
94
128
assert .NilError (t , err )
95
129
assert .DeepEqual (t , []string {"build" , "." }, args )
130
+ assert .Check (t , len (envs ) == 0 )
96
131
97
132
output .Assert (t , b .String (), map [int ]func (string ) error {
98
133
0 : output .Prefix ("failed to fetch metadata:" ),
@@ -112,6 +147,7 @@ func TestBuilderBrokenEnforced(t *testing.T) {
112
147
113
148
dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
114
149
assert .NilError (t , err )
150
+ assert .NilError (t , dockerCli .Initialize (flags .NewClientOptions ()))
115
151
dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
116
152
117
153
tcmd := newDockerCommand (dockerCli )
@@ -120,11 +156,59 @@ func TestBuilderBrokenEnforced(t *testing.T) {
120
156
cmd , args , err := tcmd .HandleGlobalFlags ()
121
157
assert .NilError (t , err )
122
158
123
- args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
159
+ var envs []string
160
+ args , os .Args , envs , err = processBuilder (dockerCli , cmd , args , os .Args )
124
161
assert .DeepEqual (t , []string {"build" , "." }, args )
162
+ assert .Check (t , len (envs ) == 0 )
125
163
126
164
output .Assert (t , err .Error (), map [int ]func (string ) error {
127
165
0 : output .Prefix ("failed to fetch metadata:" ),
128
166
2 : output .Suffix ("ERROR: BuildKit is enabled but the buildx component is missing or broken." ),
129
167
})
130
168
}
169
+
170
+ func TestHasBuilderName (t * testing.T ) {
171
+ cases := []struct {
172
+ name string
173
+ args []string
174
+ envs []string
175
+ expected bool
176
+ }{
177
+ {
178
+ name : "no args" ,
179
+ args : []string {"docker" , "build" , "." },
180
+ envs : []string {"FOO=bar" },
181
+ expected : false ,
182
+ },
183
+ {
184
+ name : "env var" ,
185
+ args : []string {"docker" , "build" , "." },
186
+ envs : []string {"BUILDX_BUILDER=foo" },
187
+ expected : true ,
188
+ },
189
+ {
190
+ name : "empty env var" ,
191
+ args : []string {"docker" , "build" , "." },
192
+ envs : []string {"BUILDX_BUILDER=" },
193
+ expected : false ,
194
+ },
195
+ {
196
+ name : "flag" ,
197
+ args : []string {"docker" , "build" , "--builder" , "foo" , "." },
198
+ envs : []string {"FOO=bar" },
199
+ expected : true ,
200
+ },
201
+ {
202
+ name : "both" ,
203
+ args : []string {"docker" , "build" , "--builder" , "foo" , "." },
204
+ envs : []string {"BUILDX_BUILDER=foo" },
205
+ expected : true ,
206
+ },
207
+ }
208
+ for _ , tt := range cases {
209
+ tt := tt
210
+ t .Run (tt .name , func (t * testing.T ) {
211
+ assert .Equal (t , tt .expected , hasBuilderName (tt .args , tt .envs ))
212
+ })
213
+ }
214
+ }
0 commit comments