|
1 | 1 | package plugins |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
| 5 | + "encoding/json" |
4 | 6 | "io" |
5 | 7 | "net/http" |
6 | 8 | "net/http/httptest" |
7 | 9 | "net/url" |
8 | | - "reflect" |
9 | 10 | "strings" |
10 | 11 | "testing" |
11 | 12 | "time" |
12 | 13 |
|
13 | 14 | "github.com/docker/docker/pkg/plugins/transport" |
14 | 15 | "github.com/docker/go-connections/tlsconfig" |
| 16 | + "github.com/stretchr/testify/assert" |
15 | 17 | ) |
16 | 18 |
|
17 | 19 | var ( |
@@ -83,9 +85,7 @@ func TestEchoInputOutput(t *testing.T) { |
83 | 85 | t.Fatal(err) |
84 | 86 | } |
85 | 87 |
|
86 | | - if !reflect.DeepEqual(output, m) { |
87 | | - t.Fatalf("Expected %v, was %v\n", m, output) |
88 | | - } |
| 88 | + assert.Equal(t, m, output) |
89 | 89 | err = c.Call("Test.Echo", nil, nil) |
90 | 90 | if err != nil { |
91 | 91 | t.Fatal(err) |
@@ -153,3 +153,82 @@ func TestClientScheme(t *testing.T) { |
153 | 153 | } |
154 | 154 | } |
155 | 155 | } |
| 156 | + |
| 157 | +func TestNewClientWithTimeout(t *testing.T) { |
| 158 | + addr := setupRemotePluginServer() |
| 159 | + defer teardownRemotePluginServer() |
| 160 | + |
| 161 | + m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}} |
| 162 | + |
| 163 | + mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) { |
| 164 | + time.Sleep(time.Duration(600) * time.Millisecond) |
| 165 | + io.Copy(w, r.Body) |
| 166 | + }) |
| 167 | + |
| 168 | + // setting timeout of 500ms |
| 169 | + timeout := time.Duration(500) * time.Millisecond |
| 170 | + c, _ := NewClientWithTimeout(addr, &tlsconfig.Options{InsecureSkipVerify: true}, timeout) |
| 171 | + var output Manifest |
| 172 | + err := c.Call("Test.Echo", m, &output) |
| 173 | + if err == nil { |
| 174 | + t.Fatal("Expected timeout error") |
| 175 | + } |
| 176 | +} |
| 177 | + |
| 178 | +func TestClientStream(t *testing.T) { |
| 179 | + addr := setupRemotePluginServer() |
| 180 | + defer teardownRemotePluginServer() |
| 181 | + |
| 182 | + m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}} |
| 183 | + var output Manifest |
| 184 | + |
| 185 | + mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) { |
| 186 | + if r.Method != "POST" { |
| 187 | + t.Fatalf("Expected POST, got %s", r.Method) |
| 188 | + } |
| 189 | + |
| 190 | + header := w.Header() |
| 191 | + header.Set("Content-Type", transport.VersionMimetype) |
| 192 | + |
| 193 | + io.Copy(w, r.Body) |
| 194 | + }) |
| 195 | + |
| 196 | + c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true}) |
| 197 | + body, err := c.Stream("Test.Echo", m) |
| 198 | + if err != nil { |
| 199 | + t.Fatal(err) |
| 200 | + } |
| 201 | + defer body.Close() |
| 202 | + if err := json.NewDecoder(body).Decode(&output); err != nil { |
| 203 | + t.Fatalf("Test.Echo: error reading plugin resp: %v", err) |
| 204 | + } |
| 205 | + assert.Equal(t, m, output) |
| 206 | +} |
| 207 | + |
| 208 | +func TestClientSendFile(t *testing.T) { |
| 209 | + addr := setupRemotePluginServer() |
| 210 | + defer teardownRemotePluginServer() |
| 211 | + |
| 212 | + m := Manifest{[]string{"VolumeDriver", "NetworkDriver"}} |
| 213 | + var output Manifest |
| 214 | + var buf bytes.Buffer |
| 215 | + if err := json.NewEncoder(&buf).Encode(m); err != nil { |
| 216 | + t.Fatal(err) |
| 217 | + } |
| 218 | + mux.HandleFunc("/Test.Echo", func(w http.ResponseWriter, r *http.Request) { |
| 219 | + if r.Method != "POST" { |
| 220 | + t.Fatalf("Expected POST, got %s\n", r.Method) |
| 221 | + } |
| 222 | + |
| 223 | + header := w.Header() |
| 224 | + header.Set("Content-Type", transport.VersionMimetype) |
| 225 | + |
| 226 | + io.Copy(w, r.Body) |
| 227 | + }) |
| 228 | + |
| 229 | + c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true}) |
| 230 | + if err := c.SendFile("Test.Echo", &buf, &output); err != nil { |
| 231 | + t.Fatal(err) |
| 232 | + } |
| 233 | + assert.Equal(t, m, output) |
| 234 | +} |
0 commit comments