79 lines
2.5 KiB
Go
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)
|
|
})
|
|
}
|
|
}
|