123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package convert
- import (
- "testing"
- "github.com/docker/docker/api/types/mount"
- composetypes "github.com/docker/docker/cli/compose/types"
- "github.com/docker/docker/pkg/testutil/assert"
- )
- func TestIsReadOnly(t *testing.T) {
- assert.Equal(t, isReadOnly([]string{"foo", "bar", "ro"}), true)
- assert.Equal(t, isReadOnly([]string{"ro"}), true)
- assert.Equal(t, isReadOnly([]string{}), false)
- assert.Equal(t, isReadOnly([]string{"foo", "rw"}), false)
- assert.Equal(t, isReadOnly([]string{"foo"}), false)
- }
- func TestIsNoCopy(t *testing.T) {
- assert.Equal(t, isNoCopy([]string{"foo", "bar", "nocopy"}), true)
- assert.Equal(t, isNoCopy([]string{"nocopy"}), true)
- assert.Equal(t, isNoCopy([]string{}), false)
- assert.Equal(t, isNoCopy([]string{"foo", "rw"}), false)
- }
- func TestGetBindOptions(t *testing.T) {
- opts := getBindOptions([]string{"slave"})
- expected := mount.BindOptions{Propagation: mount.PropagationSlave}
- assert.Equal(t, *opts, expected)
- }
- func TestGetBindOptionsNone(t *testing.T) {
- opts := getBindOptions([]string{"ro"})
- assert.Equal(t, opts, (*mount.BindOptions)(nil))
- }
- func TestConvertVolumeToMountAnonymousVolume(t *testing.T) {
- stackVolumes := volumes{}
- namespace := NewNamespace("foo")
- expected := mount.Mount{
- Type: mount.TypeVolume,
- Target: "/foo/bar",
- }
- mount, err := convertVolumeToMount("/foo/bar", stackVolumes, namespace)
- assert.NilError(t, err)
- assert.DeepEqual(t, mount, expected)
- }
- func TestConvertVolumeToMountInvalidFormat(t *testing.T) {
- namespace := NewNamespace("foo")
- invalids := []string{"::", "::cc", ":bb:", "aa::", "aa::cc", "aa:bb:", " : : ", " : :cc", " :bb: ", "aa: : ", "aa: :cc", "aa:bb: "}
- for _, vol := range invalids {
- _, err := convertVolumeToMount(vol, volumes{}, namespace)
- assert.Error(t, err, "invalid volume: "+vol)
- }
- }
- func TestConvertVolumeToMountNamedVolume(t *testing.T) {
- stackVolumes := volumes{
- "normal": composetypes.VolumeConfig{
- Driver: "glusterfs",
- DriverOpts: map[string]string{
- "opt": "value",
- },
- Labels: map[string]string{
- "something": "labeled",
- },
- },
- }
- namespace := NewNamespace("foo")
- expected := mount.Mount{
- Type: mount.TypeVolume,
- Source: "foo_normal",
- Target: "/foo",
- ReadOnly: true,
- VolumeOptions: &mount.VolumeOptions{
- Labels: map[string]string{
- LabelNamespace: "foo",
- "something": "labeled",
- },
- DriverConfig: &mount.Driver{
- Name: "glusterfs",
- Options: map[string]string{
- "opt": "value",
- },
- },
- },
- }
- mount, err := convertVolumeToMount("normal:/foo:ro", stackVolumes, namespace)
- assert.NilError(t, err)
- assert.DeepEqual(t, mount, expected)
- }
- func TestConvertVolumeToMountNamedVolumeExternal(t *testing.T) {
- stackVolumes := volumes{
- "outside": composetypes.VolumeConfig{
- External: composetypes.External{
- External: true,
- Name: "special",
- },
- },
- }
- namespace := NewNamespace("foo")
- expected := mount.Mount{
- Type: mount.TypeVolume,
- Source: "special",
- Target: "/foo",
- }
- mount, err := convertVolumeToMount("outside:/foo", stackVolumes, namespace)
- assert.NilError(t, err)
- assert.DeepEqual(t, mount, expected)
- }
- func TestConvertVolumeToMountBind(t *testing.T) {
- stackVolumes := volumes{}
- namespace := NewNamespace("foo")
- expected := mount.Mount{
- Type: mount.TypeBind,
- Source: "/bar",
- Target: "/foo",
- ReadOnly: true,
- BindOptions: &mount.BindOptions{Propagation: mount.PropagationShared},
- }
- mount, err := convertVolumeToMount("/bar:/foo:ro,shared", stackVolumes, namespace)
- assert.NilError(t, err)
- assert.DeepEqual(t, mount, expected)
- }
- func TestConvertVolumeToMountVolumeDoesNotExist(t *testing.T) {
- namespace := NewNamespace("foo")
- _, err := convertVolumeToMount("unknown:/foo:ro", volumes{}, namespace)
- assert.Error(t, err, "undefined volume: unknown")
- }
|