123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package mounts // import "github.com/docker/docker/volume/mounts"
- import (
- "errors"
- "runtime"
- "testing"
- "github.com/docker/docker/api/types/mount"
- "gotest.tools/v3/assert"
- is "gotest.tools/v3/assert/cmp"
- )
- func TestValidateMount(t *testing.T) {
- testDir := t.TempDir()
- parser := NewParser()
- tests := []struct {
- input mount.Mount
- expected error
- }{
- {
- input: mount.Mount{Type: mount.TypeVolume},
- expected: errMissingField("Target"),
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: testDestinationPath, Source: "hello"},
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: testDestinationPath},
- },
- {
- input: mount.Mount{Type: mount.TypeBind},
- expected: errMissingField("Target"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Target: testDestinationPath},
- expected: errMissingField("Source"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Target: testDestinationPath, Source: testSourcePath, VolumeOptions: &mount.VolumeOptions{}},
- expected: errExtraField("VolumeOptions"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir, Target: testDestinationPath},
- },
- {
- input: mount.Mount{Type: "invalid", Target: testDestinationPath},
- expected: errors.New("mount type unknown"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testSourcePath, Target: testDestinationPath},
- expected: errBindSourceDoesNotExist(testSourcePath),
- },
- }
- for _, tc := range tests {
- tc := tc
- t.Run("", func(t *testing.T) {
- err := parser.ValidateMountConfig(&tc.input)
- if tc.expected != nil {
- assert.Check(t, is.ErrorContains(err, tc.expected.Error()))
- } else {
- assert.Check(t, err)
- }
- })
- }
- }
- func TestValidateLCOWMount(t *testing.T) {
- if runtime.GOOS != "windows" {
- t.Skip("only tested on Windows")
- }
- testDir := t.TempDir()
- parser := NewLCOWParser()
- tests := []struct {
- input mount.Mount
- expected error
- }{
- {
- input: mount.Mount{Type: mount.TypeVolume},
- expected: errMissingField("Target"),
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: "/foo", Source: "hello"},
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: "/foo"},
- },
- {
- input: mount.Mount{Type: mount.TypeBind},
- expected: errMissingField("Target"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Target: "/foo"},
- expected: errMissingField("Source"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Target: "/foo", Source: "c:\\foo", VolumeOptions: &mount.VolumeOptions{}},
- expected: errExtraField("VolumeOptions"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: "c:\\foo", Target: "/foo"},
- expected: errBindSourceDoesNotExist("c:\\foo"),
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir, Target: "/foo"},
- },
- {
- input: mount.Mount{Type: "invalid", Target: "/foo"},
- expected: errors.New("mount type unknown"),
- },
- }
- for _, tc := range tests {
- tc := tc
- t.Run("", func(t *testing.T) {
- err := parser.ValidateMountConfig(&tc.input)
- if tc.expected != nil {
- assert.Check(t, is.ErrorContains(err, tc.expected.Error()))
- } else {
- assert.Check(t, err)
- }
- })
- }
- }
|