12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package volumes
- import (
- "context"
- "os"
- "os/exec"
- "path/filepath"
- "testing"
- "time"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/testutil/fixtures/plugin"
- "github.com/moby/locker"
- "github.com/pkg/errors"
- "gotest.tools/v3/assert"
- )
- var pluginBuildLock = locker.New()
- // ensurePlugin makes the that a plugin binary has been installed on the system.
- // Plugins that have not been installed are built from `cmd/<name>`.
- func ensurePlugin(t *testing.T, name string) string {
- pluginBuildLock.Lock(name)
- defer pluginBuildLock.Unlock(name)
- goPath := os.Getenv("GOPATH")
- if goPath == "" {
- goPath = "/go"
- }
- installPath := filepath.Join(goPath, "bin", name)
- if _, err := os.Stat(installPath); err == nil {
- return installPath
- }
- goBin, err := exec.LookPath("go")
- assert.NilError(t, err)
- cmd := exec.Command(goBin, "build", "-o", installPath, "./"+filepath.Join("cmd", name))
- cmd.Env = append(os.Environ(), "CGO_ENABLED=0", "GO111MODULE=off")
- if out, err := cmd.CombinedOutput(); err != nil {
- t.Fatal(errors.Wrapf(err, "error building basic plugin bin: %s", string(out)))
- }
- return installPath
- }
- func withSockPath(name string) func(*plugin.Config) {
- return func(cfg *plugin.Config) {
- cfg.Interface.Socket = name
- }
- }
- func createPlugin(ctx context.Context, t *testing.T, client plugin.CreateClient, alias, bin string, opts ...plugin.CreateOpt) {
- pluginBin := ensurePlugin(t, bin)
- opts = append(opts, withSockPath("plugin.sock"))
- opts = append(opts, plugin.WithBinary(pluginBin))
- ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
- err := plugin.Create(ctx, client, alias, opts...)
- cancel()
- assert.NilError(t, err)
- }
- func asVolumeDriver(cfg *plugin.Config) {
- cfg.Interface.Types = []types.PluginInterfaceType{
- {Capability: "volumedriver", Prefix: "docker", Version: "1.0"},
- }
- }
|