Files
buildx/driver/docker-container/driver_test.go
T
2026-08-08 09:49:09 -05:00

79 lines
2.5 KiB
Go

package docker
import (
"context"
"errors"
"testing"
"github.com/docker/buildx/driver"
"github.com/docker/buildx/util/progress"
"github.com/moby/buildkit/client"
dockerclient "github.com/moby/moby/client"
"github.com/stretchr/testify/require"
)
var errContainerCreateCaptured = errors.New("container create captured")
type containerCreateCapturingAPI struct {
dockerclient.APIClient
containerCreateOptions dockerclient.ContainerCreateOptions
}
func (c *containerCreateCapturingAPI) ImagePull(context.Context, string, dockerclient.ImagePullOptions) (dockerclient.ImagePullResponse, error) {
return nil, errors.New("skip image pull in test")
}
func (c *containerCreateCapturingAPI) ImageInspect(context.Context, string, ...dockerclient.ImageInspectOption) (dockerclient.ImageInspectResult, error) {
return dockerclient.ImageInspectResult{}, nil
}
func (c *containerCreateCapturingAPI) Info(context.Context, dockerclient.InfoOptions) (dockerclient.SystemInfoResult, error) {
result := dockerclient.SystemInfoResult{}
result.Info.CgroupDriver = "cgroupfs"
return result, nil
}
func (c *containerCreateCapturingAPI) ContainerCreate(_ context.Context, options dockerclient.ContainerCreateOptions) (dockerclient.ContainerCreateResult, error) {
c.containerCreateOptions = options
return dockerclient.ContainerCreateResult{}, errContainerCreateCaptured
}
func TestCreateCgroupParent(t *testing.T) {
tests := []struct {
name string
driverOpts map[string]string
expectedCgroupParent string
}{
{
name: "cgroupfs default",
expectedCgroupParent: "",
},
{
name: "explicit cgroup parent",
driverOpts: map[string]string{"cgroup-parent": "/custom/buildx"},
expectedCgroupParent: "/custom/buildx",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
api := &containerCreateCapturingAPI{}
drv, err := (&factory{}).New(context.Background(), driver.InitConfig{
Name: "buildx-test",
DockerAPI: api,
DriverOpts: tt.driverOpts,
})
require.NoError(t, err)
d := drv.(*Driver)
d.gpus = nil
err = progress.Wrap("test", func(*client.SolveStatus) {}, func(l progress.SubLogger) error {
return d.create(context.Background(), l)
})
require.ErrorIs(t, err, errContainerCreateCaptured)
require.NotNil(t, api.containerCreateOptions.HostConfig)
require.Equal(t, tt.expectedCgroupParent, api.containerCreateOptions.HostConfig.CgroupParent)
})
}
}