github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/integration/plugin/volumes/helpers_test.go (about) 1 package volumes 2 3 import ( 4 "context" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "testing" 9 "time" 10 11 "github.com/docker/docker/api/types" 12 "github.com/docker/docker/internal/test/fixtures/plugin" 13 "github.com/docker/docker/pkg/locker" 14 "github.com/pkg/errors" 15 ) 16 17 var pluginBuildLock = locker.New() 18 19 // ensurePlugin makes the that a plugin binary has been installed on the system. 20 // Plugins that have not been installed are built from `cmd/<name>`. 21 func ensurePlugin(t *testing.T, name string) string { 22 pluginBuildLock.Lock(name) 23 defer pluginBuildLock.Unlock(name) 24 25 goPath := os.Getenv("GOPATH") 26 if goPath == "" { 27 goPath = "/go" 28 } 29 installPath := filepath.Join(goPath, "bin", name) 30 if _, err := os.Stat(installPath); err == nil { 31 return installPath 32 } 33 34 goBin, err := exec.LookPath("go") 35 if err != nil { 36 t.Fatal(err) 37 } 38 39 cmd := exec.Command(goBin, "build", "-o", installPath, "./"+filepath.Join("cmd", name)) 40 cmd.Env = append(cmd.Env, "CGO_ENABLED=0") 41 if out, err := cmd.CombinedOutput(); err != nil { 42 t.Fatal(errors.Wrapf(err, "error building basic plugin bin: %s", string(out))) 43 } 44 45 return installPath 46 } 47 48 func withSockPath(name string) func(*plugin.Config) { 49 return func(cfg *plugin.Config) { 50 cfg.Interface.Socket = name 51 } 52 } 53 54 func createPlugin(t *testing.T, client plugin.CreateClient, alias, bin string, opts ...plugin.CreateOpt) { 55 pluginBin := ensurePlugin(t, bin) 56 57 opts = append(opts, withSockPath("plugin.sock")) 58 opts = append(opts, plugin.WithBinary(pluginBin)) 59 60 ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) 61 err := plugin.Create(ctx, client, alias, opts...) 62 cancel() 63 64 if err != nil { 65 t.Fatal(err) 66 } 67 } 68 69 func asVolumeDriver(cfg *plugin.Config) { 70 cfg.Interface.Types = []types.PluginInterfaceType{ 71 {Capability: "volumedriver", Prefix: "docker", Version: "1.0"}, 72 } 73 }