@@ -3,17 +3,27 @@ package main
33import (
44 "bytes"
55 "os"
6+ "runtime"
67 "testing"
78
89 "github.com/docker/cli/cli/command"
10+ "github.com/docker/cli/internal/test/output"
911 "gotest.tools/v3/assert"
1012 "gotest.tools/v3/env"
1113 "gotest.tools/v3/fs"
1214)
1315
14- func TestBuild (t * testing.T ) {
16+ var pluginFilename = "docker-buildx"
17+
18+ func init () {
19+ if runtime .GOOS == "windows" {
20+ pluginFilename = pluginFilename + ".exe"
21+ }
22+ }
23+
24+ func TestBuildWithBuilder (t * testing.T ) {
1525 dir := fs .NewDir (t , t .Name (),
16- fs .WithFile ("docker-buildx" , `#!/bin/sh
26+ fs .WithFile (pluginFilename , `#!/bin/sh
1727echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortDescription":"Build with BuildKit"}'` , fs .WithMode (0777 )),
1828 )
1929 defer dir .Remove ()
@@ -36,10 +46,44 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD
3646
3747func TestBuildkitDisabled (t * testing.T ) {
3848 defer env .Patch (t , "DOCKER_BUILDKIT" , "0" )()
39- var b bytes.Buffer
4049
41- dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (& b ))
50+ dir := fs .NewDir (t , t .Name (),
51+ fs .WithFile (pluginFilename , `#!/bin/sh exit 1` , fs .WithMode (0777 )),
52+ )
53+ defer dir .Remove ()
54+
55+ b := bytes .NewBuffer (nil )
56+
57+ dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
58+ assert .NilError (t , err )
59+ dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
60+
61+ tcmd := newDockerCommand (dockerCli )
62+ tcmd .SetArgs ([]string {"build" , "." })
63+
64+ cmd , args , err := tcmd .HandleGlobalFlags ()
65+ assert .NilError (t , err )
66+
67+ args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
68+ assert .NilError (t , err )
69+ assert .DeepEqual (t , []string {"build" , "." }, args )
70+
71+ output .Assert (t , b .String (), map [int ]func (string ) error {
72+ 0 : output .Suffix ("DEPRECATED: The legacy builder is deprecated and will be removed in a future release." ),
73+ })
74+ }
75+
76+ func TestBuilderBroken (t * testing.T ) {
77+ dir := fs .NewDir (t , t .Name (),
78+ fs .WithFile (pluginFilename , `#!/bin/sh exit 1` , fs .WithMode (0777 )),
79+ )
80+ defer dir .Remove ()
81+
82+ b := bytes .NewBuffer (nil )
83+
84+ dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
4285 assert .NilError (t , err )
86+ dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
4387
4488 tcmd := newDockerCommand (dockerCli )
4589 tcmd .SetArgs ([]string {"build" , "." })
@@ -50,4 +94,38 @@ func TestBuildkitDisabled(t *testing.T) {
5094 args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
5195 assert .NilError (t , err )
5296 assert .DeepEqual (t , []string {"build" , "." }, args )
97+
98+ output .Assert (t , b .String (), map [int ]func (string ) error {
99+ 0 : output .Prefix ("failed to fetch metadata:" ),
100+ 2 : output .Suffix ("DEPRECATED: The legacy builder is deprecated and will be removed in a future release." ),
101+ })
102+ }
103+
104+ func TestBuilderBrokenEnforced (t * testing.T ) {
105+ defer env .Patch (t , "DOCKER_BUILDKIT" , "1" )()
106+
107+ dir := fs .NewDir (t , t .Name (),
108+ fs .WithFile (pluginFilename , `#!/bin/sh exit 1` , fs .WithMode (0777 )),
109+ )
110+ defer dir .Remove ()
111+
112+ b := bytes .NewBuffer (nil )
113+
114+ dockerCli , err := command .NewDockerCli (command .WithInputStream (discard ), command .WithCombinedStreams (b ))
115+ assert .NilError (t , err )
116+ dockerCli .ConfigFile ().CLIPluginsExtraDirs = []string {dir .Path ()}
117+
118+ tcmd := newDockerCommand (dockerCli )
119+ tcmd .SetArgs ([]string {"build" , "." })
120+
121+ cmd , args , err := tcmd .HandleGlobalFlags ()
122+ assert .NilError (t , err )
123+
124+ args , os .Args , err = processBuilder (dockerCli , cmd , args , os .Args )
125+ assert .DeepEqual (t , []string {"build" , "." }, args )
126+
127+ output .Assert (t , err .Error (), map [int ]func (string ) error {
128+ 0 : output .Prefix ("failed to fetch metadata:" ),
129+ 2 : output .Suffix ("ERROR: BuildKit is enabled but the buildx component is missing or broken." ),
130+ })
53131}
0 commit comments