|
@@ -1,17 +1,19 @@
|
|
package plugins
|
|
package plugins
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
|
|
+ "encoding/json"
|
|
"io"
|
|
"io"
|
|
"net/http"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"net/url"
|
|
- "reflect"
|
|
|
|
"strings"
|
|
"strings"
|
|
"testing"
|
|
"testing"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
"github.com/docker/docker/pkg/plugins/transport"
|
|
"github.com/docker/docker/pkg/plugins/transport"
|
|
"github.com/docker/go-connections/tlsconfig"
|
|
"github.com/docker/go-connections/tlsconfig"
|
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
)
|
|
)
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -83,9 +85,7 @@ func TestEchoInputOutput(t *testing.T) {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
|
|
- if !reflect.DeepEqual(output, m) {
|
|
|
|
- t.Fatalf("Expected %v, was %v\n", m, output)
|
|
|
|
- }
|
|
|
|
|
|
+ assert.Equal(t, m, output)
|
|
err = c.Call("Test.Echo", nil, nil)
|
|
err = c.Call("Test.Echo", nil, nil)
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
@@ -153,3 +153,82 @@ func TestClientScheme(t *testing.T) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func TestNewClientWithTimeout(t *testing.T) {
|
|
|
|
+ addr := setupRemotePluginServer()
|
|
|
|
+ defer teardownRemotePluginServer()
|
|
|
|
+
|
|
|
|
+ m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}}
|
|
|
|
+
|
|
|
|
+ mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+ time.Sleep(time.Duration(600) * time.Millisecond)
|
|
|
|
+ io.Copy(w, r.Body)
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ // setting timeout of 500ms
|
|
|
|
+ timeout := time.Duration(500) * time.Millisecond
|
|
|
|
+ c, _ := NewClientWithTimeout(addr, &tlsconfig.Options{InsecureSkipVerify: true}, timeout)
|
|
|
|
+ var output Manifest
|
|
|
|
+ err := c.Call("Test.Echo", m, &output)
|
|
|
|
+ if err == nil {
|
|
|
|
+ t.Fatal("Expected timeout error")
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestClientStream(t *testing.T) {
|
|
|
|
+ addr := setupRemotePluginServer()
|
|
|
|
+ defer teardownRemotePluginServer()
|
|
|
|
+
|
|
|
|
+ m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}}
|
|
|
|
+ var output Manifest
|
|
|
|
+
|
|
|
|
+ mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+ if r.Method != "POST" {
|
|
|
|
+ t.Fatalf("Expected POST, got %s", r.Method)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ header := w.Header()
|
|
|
|
+ header.Set("Content-Type", transport.VersionMimetype)
|
|
|
|
+
|
|
|
|
+ io.Copy(w, r.Body)
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true})
|
|
|
|
+ body, err := c.Stream("Test.Echo", m)
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ defer body.Close()
|
|
|
|
+ if err := json.NewDecoder(body).Decode(&output); err != nil {
|
|
|
|
+ t.Fatalf("Test.Echo: error reading plugin resp: %v", err)
|
|
|
|
+ }
|
|
|
|
+ assert.Equal(t, m, output)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestClientSendFile(t *testing.T) {
|
|
|
|
+ addr := setupRemotePluginServer()
|
|
|
|
+ defer teardownRemotePluginServer()
|
|
|
|
+
|
|
|
|
+ m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}}
|
|
|
|
+ var output Manifest
|
|
|
|
+ var buf bytes.Buffer
|
|
|
|
+ if err := json.NewEncoder(&buf).Encode(m); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+ if r.Method != "POST" {
|
|
|
|
+ t.Fatalf("Expected POST, got %s\n", r.Method)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ header := w.Header()
|
|
|
|
+ header.Set("Content-Type", transport.VersionMimetype)
|
|
|
|
+
|
|
|
|
+ io.Copy(w, r.Body)
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true})
|
|
|
|
+ if err := c.SendFile("Test.Echo", &buf, &output); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ assert.Equal(t, m, output)
|
|
|
|
+}
|