diff --git a/Makefile b/Makefile index 623d509..2a94779 100644 --- a/Makefile +++ b/Makefile @@ -12,12 +12,11 @@ test-local: install-deps fmt lint vet @go test -v ./... test: - @docker run -e GO111MODULE=off -v ${shell pwd}:/go/src/${PKG_NAME} -w /go/src/${PKG_NAME} ${IMAGE} make test-local + @docker run --rm -v ${shell pwd}:/go/src/${PKG_NAME} -w /go/src/${PKG_NAME} ${IMAGE} make test-local install-deps: @echo "+ $@" - @go get -u golang.org/x/lint/golint - @go get -d -t ./... + @go install golang.org/x/lint/golint@latest lint: @echo "+ $@" diff --git a/authorization/api_test.go b/authorization/api_test.go index 5532b2b..dd8e39b 100644 --- a/authorization/api_test.go +++ b/authorization/api_test.go @@ -17,7 +17,6 @@ import ( "time" "github.com/docker/go-plugins-helpers/sdk" - "github.com/stretchr/testify/require" ) type TestPlugin struct { @@ -150,21 +149,29 @@ func TestPeerCertificateMarshalJSON(t *testing.T) { } // generate private key privatekey, err := rsa.GenerateKey(rand.Reader, 2048) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } publickey := &privatekey.PublicKey // create a self-signed certificate. template = parent parent := template raw, err := x509.CreateCertificate(rand.Reader, template, parent, publickey, privatekey) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } cert, err := x509.ParseCertificate(raw) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } certs := []*x509.Certificate{cert} addr := "www.authz.com/auth" req, err := http.NewRequest("GET", addr, nil) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } req.RequestURI = addr req.TLS = &tls.ConnectionState{} @@ -176,15 +183,25 @@ func TestPeerCertificateMarshalJSON(t *testing.T) { t.Run("Marshalling :", func(t *testing.T) { raw, err = pcObj.MarshalJSON() - require.NotNil(t, raw) - require.Nil(t, err) + if raw == nil { + t.Fatalf("Failed to marshal peer certificate") + } + if err != nil { + t.Fatal(err) + } }) t.Run("UnMarshalling :", func(t *testing.T) { err := pcObj.UnmarshalJSON(raw) - require.Nil(t, err) - require.Equal(t, "Earth", pcObj.Subject.Country[0]) - require.Equal(t, true, pcObj.IsCA) + if err != nil { + t.Fatal(err) + } + if expected := "Earth"; pcObj.Subject.Country[0] != expected { + t.Fatalf("Expected %s, got %s\n", expected, pcObj.Subject.Country[0]) + } + if pcObj.IsCA != true { + t.Fatalf("Expected %t, got %t\n", true, pcObj.IsCA) + } }) } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..9588de4 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module github.com/docker/go-plugins-helpers + +go 1.21 + +require ( + github.com/Microsoft/go-winio v0.6.2 + github.com/docker/go-connections v0.5.0 +) + +require golang.org/x/sys v0.10.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..9fc01b3 --- /dev/null +++ b/go.sum @@ -0,0 +1,6 @@ +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/sdk/unix_listener_nosystemd.go b/sdk/unix_listener_nosystemd.go deleted file mode 100644 index 1a9247b..0000000 --- a/sdk/unix_listener_nosystemd.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build (linux || freebsd) && nosystemd - -package sdk - -import "net" - -// FIXME(thaJeztah): this code was added in https://github.com/docker/go-plugins-helpers/commit/008703b825c10311af1840deeaf5f4769df7b59e, but is not used anywhere -func setupSocketActivation() (net.Listener, error) { - return nil, nil -} diff --git a/sdk/unix_listener_systemd.go b/sdk/unix_listener_systemd.go deleted file mode 100644 index 59c53bf..0000000 --- a/sdk/unix_listener_systemd.go +++ /dev/null @@ -1,45 +0,0 @@ -//go:build (linux || freebsd) && !nosystemd - -package sdk - -import ( - "fmt" - "net" - "os" - - "github.com/coreos/go-systemd/activation" -) - -// isRunningSystemd checks whether the host was booted with systemd as its init -// system. This functions similarly to systemd's `sd_booted(3)`: internally, it -// checks whether /run/systemd/system/ exists and is a directory. -// http://www.freedesktop.org/software/systemd/man/sd_booted.html -// -// Copied from github.com/coreos/go-systemd/util.IsRunningSystemd -func isRunningSystemd() bool { - fi, err := os.Lstat("/run/systemd/system") - if err != nil { - return false - } - return fi.IsDir() -} - -// FIXME(thaJeztah): this code was added in https://github.com/docker/go-plugins-helpers/commit/008703b825c10311af1840deeaf5f4769df7b59e, but is not used anywhere -func setupSocketActivation() (net.Listener, error) { - if !isRunningSystemd() { - return nil, nil - } - listenFds := activation.Files(false) - if len(listenFds) > 1 { - return nil, fmt.Errorf("expected only one socket from systemd, got %d", len(listenFds)) - } - var listener net.Listener - if len(listenFds) == 1 { - l, err := net.FileListener(listenFds[0]) - if err != nil { - return nil, err - } - listener = l - } - return listener, nil -} diff --git a/volume/shim/shim.go b/volume/shim/shim.go deleted file mode 100644 index 0dec1a1..0000000 --- a/volume/shim/shim.go +++ /dev/null @@ -1,109 +0,0 @@ -package shim - -import ( - "github.com/docker/docker/volume" - volumeplugin "github.com/docker/go-plugins-helpers/volume" -) - -type shimDriver struct { - d volume.Driver -} - -// NewHandlerFromVolumeDriver creates a plugin handler from an existing volume -// driver. This could be used, for instance, by the `local` volume driver built-in -// to Docker Engine and it would create a plugin from it that maps plugin API calls -// directly to any volume driver that satisfies the volume.Driver interface from -// Docker Engine. -func NewHandlerFromVolumeDriver(d volume.Driver) *volumeplugin.Handler { - return volumeplugin.NewHandler(&shimDriver{d}) -} - -func (d *shimDriver) Create(req *volumeplugin.CreateRequest) error { - _, err := d.d.Create(req.Name, req.Options) - return err -} - -func (d *shimDriver) List() (*volumeplugin.ListResponse, error) { - var res *volumeplugin.ListResponse - ls, err := d.d.List() - if err != nil { - return &volumeplugin.ListResponse{}, err - } - vols := make([]*volumeplugin.Volume, len(ls)) - - for i, v := range ls { - vol := &volumeplugin.Volume{ - Name: v.Name(), - Mountpoint: v.Path(), - } - vols[i] = vol - } - res.Volumes = vols - return res, nil -} - -func (d *shimDriver) Get(req *volumeplugin.GetRequest) (*volumeplugin.GetResponse, error) { - var res *volumeplugin.GetResponse - v, err := d.d.Get(req.Name) - if err != nil { - return &volumeplugin.GetResponse{}, err - } - res.Volume = &volumeplugin.Volume{ - Name: v.Name(), - Mountpoint: v.Path(), - Status: v.Status(), - } - return &volumeplugin.GetResponse{}, nil -} - -func (d *shimDriver) Remove(req *volumeplugin.RemoveRequest) error { - v, err := d.d.Get(req.Name) - if err != nil { - return err - } - if err := d.d.Remove(v); err != nil { - return err - } - return nil -} - -func (d *shimDriver) Path(req *volumeplugin.PathRequest) (*volumeplugin.PathResponse, error) { - var res *volumeplugin.PathResponse - v, err := d.d.Get(req.Name) - if err != nil { - return &volumeplugin.PathResponse{}, err - } - res.Mountpoint = v.Path() - return res, nil -} - -func (d *shimDriver) Mount(req *volumeplugin.MountRequest) (*volumeplugin.MountResponse, error) { - var res *volumeplugin.MountResponse - v, err := d.d.Get(req.Name) - if err != nil { - return &volumeplugin.MountResponse{}, err - } - pth, err := v.Mount(req.ID) - if err != nil { - return &volumeplugin.MountResponse{}, err - } - res.Mountpoint = pth - return res, nil -} - -func (d *shimDriver) Unmount(req *volumeplugin.UnmountRequest) error { - v, err := d.d.Get(req.Name) - if err != nil { - return err - } - if err := v.Unmount(req.ID); err != nil { - return err - } - return nil -} - -func (d *shimDriver) Capabilities() *volumeplugin.CapabilitiesResponse { - var res *volumeplugin.CapabilitiesResponse - res.Capabilities = volumeplugin.Capability{Scope: d.d.Scope()} - return res -} diff --git a/volume/shim/shim_test.go b/volume/shim/shim_test.go deleted file mode 100644 index bb765fb..0000000 --- a/volume/shim/shim_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package shim - -import ( - "bytes" - "encoding/json" - "net/http" - "testing" - - "github.com/docker/docker/volume" - "github.com/docker/go-connections/sockets" - volumeplugin "github.com/docker/go-plugins-helpers/volume" -) - -type testVolumeDriver struct{} - -func (testVolumeDriver) Name() string { return "" } -func (testVolumeDriver) Create(string, map[string]string) (volume.Volume, error) { return nil, nil } -func (testVolumeDriver) Remove(volume.Volume) error { return nil } -func (testVolumeDriver) List() ([]volume.Volume, error) { return nil, nil } -func (testVolumeDriver) Get(name string) (volume.Volume, error) { return nil, nil } -func (testVolumeDriver) Scope() string { return "local" } - -func TestVolumeDriver(t *testing.T) { - h := NewHandlerFromVolumeDriver(testVolumeDriver{}) - l := sockets.NewInmemSocket("test", 0) - go h.Serve(l) - defer l.Close() - - client := &http.Client{Transport: &http.Transport{ - Dial: l.Dial, - }} - - resp, err := pluginRequest(client, "/VolumeDriver.Create", &volumeplugin.CreateRequest{Name: "foo"}) - if err != nil { - t.Fatalf(err.Error()) - } - - if resp.Err != "" { - t.Fatalf("error while creating volume: %v", err) - } -} - -func pluginRequest(client *http.Client, method string, req *volumeplugin.CreateRequest) (*volumeplugin.ErrorResponse, error) { - b, err := json.Marshal(req) - if err != nil { - return nil, err - } - resp, err := client.Post("http://localhost"+method, "application/json", bytes.NewReader(b)) - if err != nil { - return nil, err - } - var vResp volumeplugin.ErrorResponse - err = json.NewDecoder(resp.Body).Decode(&vResp) - if err != nil { - return nil, err - } - - return &vResp, nil -}