143 lines
4.1 KiB
Go
143 lines
4.1 KiB
Go
|
// Copyright 2015 go-dockerclient authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package docker
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestListVolumes(t *testing.T) {
|
||
|
volumesData := `[
|
||
|
{
|
||
|
"Name": "tardis",
|
||
|
"Driver": "local",
|
||
|
"Mountpoint": "/var/lib/docker/volumes/tardis"
|
||
|
},
|
||
|
{
|
||
|
"Name": "foo",
|
||
|
"Driver": "bar",
|
||
|
"Mountpoint": "/var/lib/docker/volumes/bar"
|
||
|
}
|
||
|
]`
|
||
|
body := `{ "Volumes": ` + volumesData + ` }`
|
||
|
var expected []Volume
|
||
|
if err := json.Unmarshal([]byte(volumesData), &expected); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
client := newTestClient(&FakeRoundTripper{message: body, status: http.StatusOK})
|
||
|
volumes, err := client.ListVolumes(ListVolumesOptions{})
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(volumes, expected) {
|
||
|
t.Errorf("ListVolumes: Wrong return value. Want %#v. Got %#v.", expected, volumes)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestCreateVolume(t *testing.T) {
|
||
|
body := `{
|
||
|
"Name": "tardis",
|
||
|
"Driver": "local",
|
||
|
"Mountpoint": "/var/lib/docker/volumes/tardis"
|
||
|
}`
|
||
|
var expected Volume
|
||
|
if err := json.Unmarshal([]byte(body), &expected); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
fakeRT := &FakeRoundTripper{message: body, status: http.StatusOK}
|
||
|
client := newTestClient(fakeRT)
|
||
|
volume, err := client.CreateVolume(
|
||
|
CreateVolumeOptions{
|
||
|
Name: "tardis",
|
||
|
Driver: "local",
|
||
|
DriverOpts: map[string]string{
|
||
|
"foo": "bar",
|
||
|
},
|
||
|
},
|
||
|
)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(volume, &expected) {
|
||
|
t.Errorf("CreateVolume: Wrong return value. Want %#v. Got %#v.", expected, volume)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "POST"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("CreateVolume(): Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/volumes/create"))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("CreateVolume(): Wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestInspectVolume(t *testing.T) {
|
||
|
body := `{
|
||
|
"Name": "tardis",
|
||
|
"Driver": "local",
|
||
|
"Mountpoint": "/var/lib/docker/volumes/tardis"
|
||
|
}`
|
||
|
var expected Volume
|
||
|
if err := json.Unmarshal([]byte(body), &expected); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
fakeRT := &FakeRoundTripper{message: body, status: http.StatusOK}
|
||
|
client := newTestClient(fakeRT)
|
||
|
name := "tardis"
|
||
|
volume, err := client.InspectVolume(name)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(volume, &expected) {
|
||
|
t.Errorf("InspectVolume: Wrong return value. Want %#v. Got %#v.", expected, volume)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "GET"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("InspectVolume(%q): Wrong HTTP method. Want %s. Got %s.", name, expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/volumes/" + name))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("CreateVolume(%q): Wrong request path. Want %q. Got %q.", name, u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRemoveVolume(t *testing.T) {
|
||
|
name := "test"
|
||
|
fakeRT := &FakeRoundTripper{message: "", status: http.StatusNoContent}
|
||
|
client := newTestClient(fakeRT)
|
||
|
if err := client.RemoveVolume(name); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "DELETE"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("RemoveVolume(%q): Wrong HTTP method. Want %s. Got %s.", name, expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/volumes/" + name))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("RemoveVolume(%q): Wrong request path. Want %q. Got %q.", name, u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRemoveVolumeNotFound(t *testing.T) {
|
||
|
client := newTestClient(&FakeRoundTripper{message: "no such volume", status: http.StatusNotFound})
|
||
|
if err := client.RemoveVolume("test:"); err != ErrNoSuchVolume {
|
||
|
t.Errorf("RemoveVolume: wrong error. Want %#v. Got %#v.", ErrNoSuchVolume, err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRemoveVolumeInUse(t *testing.T) {
|
||
|
client := newTestClient(&FakeRoundTripper{message: "volume in use and cannot be removed", status: http.StatusConflict})
|
||
|
if err := client.RemoveVolume("test:"); err != ErrVolumeInUse {
|
||
|
t.Errorf("RemoveVolume: wrong error. Want %#v. Got %#v.", ErrVolumeInUse, err)
|
||
|
}
|
||
|
}
|