123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package mounts // import "github.com/docker/docker/volume/mounts"
- import (
- "os"
- "testing"
- "github.com/docker/docker/api/types/mount"
- "gotest.tools/v3/assert"
- is "gotest.tools/v3/assert/cmp"
- )
- type mockFiProvider struct{}
- func (mockFiProvider) fileInfo(path string) (exists, isDir bool, err error) {
- dirs := map[string]struct{}{
- `c:\`: {},
- `c:\windows\`: {},
- `c:\windows`: {},
- `c:\program files`: {},
- `c:\Windows`: {},
- `c:\Program Files (x86)`: {},
- `\\?\c:\windows\`: {},
- }
- files := map[string]struct{}{
- `c:\windows\system32\ntdll.dll`: {},
- }
- if _, ok := dirs[path]; ok {
- return true, true, nil
- }
- if _, ok := files[path]; ok {
- return true, false, nil
- }
- return false, false, nil
- }
- // always returns the configured error
- // this is used to test error handling
- type mockFiProviderWithError struct{ err error }
- func (m mockFiProviderWithError) fileInfo(path string) (bool, bool, error) {
- return false, false, m.err
- }
- func TestParseMountSpec(t *testing.T) {
- testDir, err := os.MkdirTemp("", "test-mount-config")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(testDir)
- parser := NewParser()
- cases := []struct {
- input mount.Mount
- expected MountPoint
- }{
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir, Target: testDestinationPath, ReadOnly: true},
- expected: MountPoint{Type: mount.TypeBind, Source: testDir, Destination: testDestinationPath, Propagation: parser.DefaultPropagationMode()},
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir, Target: testDestinationPath},
- expected: MountPoint{Type: mount.TypeBind, Source: testDir, Destination: testDestinationPath, RW: true, Propagation: parser.DefaultPropagationMode()},
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir + string(os.PathSeparator), Target: testDestinationPath, ReadOnly: true},
- expected: MountPoint{Type: mount.TypeBind, Source: testDir, Destination: testDestinationPath, Propagation: parser.DefaultPropagationMode()},
- },
- {
- input: mount.Mount{Type: mount.TypeBind, Source: testDir, Target: testDestinationPath + string(os.PathSeparator), ReadOnly: true},
- expected: MountPoint{Type: mount.TypeBind, Source: testDir, Destination: testDestinationPath, Propagation: parser.DefaultPropagationMode()},
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: testDestinationPath},
- expected: MountPoint{Type: mount.TypeVolume, Destination: testDestinationPath, RW: true, CopyData: parser.DefaultCopyMode()},
- },
- {
- input: mount.Mount{Type: mount.TypeVolume, Target: testDestinationPath + string(os.PathSeparator)},
- expected: MountPoint{Type: mount.TypeVolume, Destination: testDestinationPath, RW: true, CopyData: parser.DefaultCopyMode()},
- },
- }
- for _, tc := range cases {
- tc := tc
- t.Run("", func(t *testing.T) {
- mp, err := parser.ParseMountSpec(tc.input)
- assert.NilError(t, err)
- assert.Check(t, is.Equal(mp.Type, tc.expected.Type))
- assert.Check(t, is.Equal(mp.Destination, tc.expected.Destination))
- assert.Check(t, is.Equal(mp.Source, tc.expected.Source))
- assert.Check(t, is.Equal(mp.RW, tc.expected.RW))
- assert.Check(t, is.Equal(mp.Propagation, tc.expected.Propagation))
- assert.Check(t, is.Equal(mp.Driver, tc.expected.Driver))
- assert.Check(t, is.Equal(mp.CopyData, tc.expected.CopyData))
- })
- }
- }
|