11package tests
22
33import (
4+ "fmt"
5+ "os"
46 "strings"
57 "testing"
68
9+ "github.com/docker/buildx/driver"
10+ "github.com/moby/buildkit/identity"
711 "github.com/moby/buildkit/util/testutil/integration"
812 "github.com/stretchr/testify/require"
913)
@@ -18,6 +22,7 @@ func createCmd(sb integration.Sandbox, opts ...cmdOpt) (string, error) {
1822var createTests = []func (t * testing.T , sb integration.Sandbox ){
1923 testCreateMemoryLimit ,
2024 testCreateRestartAlways ,
25+ testCreateRemoteContainer ,
2126}
2227
2328func testCreateMemoryLimit (t * testing.T , sb integration.Sandbox ) {
@@ -57,3 +62,49 @@ func testCreateRestartAlways(t *testing.T, sb integration.Sandbox) {
5762 require .NoError (t , err , out )
5863 builderName = strings .TrimSpace (out )
5964}
65+
66+ func testCreateRemoteContainer (t * testing.T , sb integration.Sandbox ) {
67+ if sb .Name () != "docker" {
68+ t .Skip ("skipping test for non-docker workers" )
69+ }
70+
71+ ctnBuilderName := "ctn-builder-" + identity .NewID ()
72+ remoteBuilderName := "remote-builder-" + identity .NewID ()
73+ var hasCtnBuilder , hasRemoteBuilder bool
74+ t .Cleanup (func () {
75+ if hasCtnBuilder {
76+ out , err := rmCmd (sb , withArgs (ctnBuilderName ))
77+ require .NoError (t , err , out )
78+ }
79+ if hasRemoteBuilder {
80+ out , err := rmCmd (sb , withArgs (remoteBuilderName ))
81+ require .NoError (t , err , out )
82+ }
83+ })
84+
85+ out , err := createCmd (sb , withArgs ("--driver" , "docker-container" , "--name" , ctnBuilderName ))
86+ require .NoError (t , err , out )
87+ hasCtnBuilder = true
88+
89+ out , err = inspectCmd (sb , withArgs ("--bootstrap" , ctnBuilderName ))
90+ require .NoError (t , err , out )
91+
92+ cmd := dockerCmd (sb , withArgs ("container" , "inspect" , fmt .Sprintf ("%s0" , driver .BuilderName (ctnBuilderName ))))
93+ cmd .Stderr = os .Stderr
94+ require .NoError (t , cmd .Run ())
95+
96+ out , err = createCmd (sb , withArgs ("--driver" , "remote" , "--name" , remoteBuilderName , fmt .Sprintf ("docker-container://%s0" , driver .BuilderName (ctnBuilderName ))))
97+ require .NoError (t , err , out )
98+ hasRemoteBuilder = true
99+
100+ out , err = inspectCmd (sb , withArgs (remoteBuilderName ))
101+ require .NoError (t , err , out )
102+
103+ for _ , line := range strings .Split (out , "\n " ) {
104+ if v , ok := strings .CutPrefix (line , "Status:" ); ok {
105+ require .Equal (t , strings .TrimSpace (v ), "running" )
106+ return
107+ }
108+ }
109+ require .Fail (t , "remote builder is not running" )
110+ }
0 commit comments