mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Print which path failed when the mount source doesn't exist.
Changes Details: -------------- Fixes: #36395 Refactoring the code to do the following: 1. Add the method `errBindSourceDoesNotExist` inside `validate.go` to be in-line with the rest of error message 2. Utilised the new method inside `linux_parser.go`, `windows_parser.go` and `validate_test.go` 3. Change the format from `bind mount source path: '%s' does not exist` to `bind mount source path does not exist: %s` 4. Reflected the format change into the 2 unit tests, namely: `volume_test.go` and `validate_test.go` 5. Reflected the format change into `docker_api_containers_test.go` integration test Signed-off-by: Amr Gawish <amr.gawish@gmail.com>
This commit is contained in:
parent
6cb75dd5b6
commit
df6af282b9
6 changed files with 11 additions and 9 deletions
|
@ -1713,7 +1713,7 @@ func (s *DockerSuite) TestContainersAPICreateMountsValidation(c *check.C) {
|
|||
Type: "bind",
|
||||
Source: notExistPath,
|
||||
Target: destPath}}},
|
||||
msg: "bind source path does not exist",
|
||||
msg: "bind mount source path does not exist: " + notExistPath,
|
||||
},
|
||||
{
|
||||
config: containertypes.Config{
|
||||
|
|
|
@ -83,7 +83,7 @@ func (p *linuxParser) validateMountConfigImpl(mnt *mount.Mount, validateBindSour
|
|||
if validateBindSourceExists {
|
||||
exists, _, _ := currentFileInfoProvider.fileInfo(mnt.Source)
|
||||
if !exists {
|
||||
return &errMountConfig{mnt, errBindNotExist}
|
||||
return &errMountConfig{mnt, errBindSourceDoesNotExist(mnt.Source)}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var errBindNotExist = errors.New("bind source path does not exist")
|
||||
|
||||
type errMountConfig struct {
|
||||
mount *mount.Mount
|
||||
err error
|
||||
|
@ -18,6 +16,10 @@ func (e *errMountConfig) Error() string {
|
|||
return fmt.Sprintf("invalid mount config for type %q: %v", e.mount.Type, e.err.Error())
|
||||
}
|
||||
|
||||
func errBindSourceDoesNotExist(path string) error {
|
||||
return errors.Errorf("bind mount source path does not exist: %s", path)
|
||||
}
|
||||
|
||||
func errExtraField(name string) error {
|
||||
return errors.Errorf("field %s must not be specified", name)
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ func TestValidateMount(t *testing.T) {
|
|||
|
||||
{mount.Mount{Type: mount.TypeBind, Source: testDir, Target: testDestinationPath}, nil},
|
||||
{mount.Mount{Type: "invalid", Target: testDestinationPath}, errors.New("mount type unknown")},
|
||||
{mount.Mount{Type: mount.TypeBind, Source: testSourcePath, Target: testDestinationPath}, errBindNotExist},
|
||||
{mount.Mount{Type: mount.TypeBind, Source: testSourcePath, Target: testDestinationPath}, errBindSourceDoesNotExist(testSourcePath)},
|
||||
}
|
||||
|
||||
lcowCases := []struct {
|
||||
|
@ -44,7 +44,7 @@ func TestValidateMount(t *testing.T) {
|
|||
{mount.Mount{Type: mount.TypeBind}, errMissingField("Target")},
|
||||
{mount.Mount{Type: mount.TypeBind, Target: "/foo"}, errMissingField("Source")},
|
||||
{mount.Mount{Type: mount.TypeBind, Target: "/foo", Source: "c:\\foo", VolumeOptions: &mount.VolumeOptions{}}, errExtraField("VolumeOptions")},
|
||||
{mount.Mount{Type: mount.TypeBind, Source: "c:\\foo", Target: "/foo"}, errBindNotExist},
|
||||
{mount.Mount{Type: mount.TypeBind, Source: "c:\\foo", Target: "/foo"}, errBindSourceDoesNotExist("c:\\foo")},
|
||||
{mount.Mount{Type: mount.TypeBind, Source: testDir, Target: "/foo"}, nil},
|
||||
{mount.Mount{Type: "invalid", Target: "/foo"}, errors.New("mount type unknown")},
|
||||
}
|
||||
|
|
|
@ -120,7 +120,7 @@ func TestParseMountRaw(t *testing.T) {
|
|||
`c:\:d:\:xyzzy`: "invalid volume specification: ",
|
||||
`c:`: "cannot be `c:`",
|
||||
`c:\`: "cannot be `c:`",
|
||||
`c:\notexist:d:`: `source path does not exist`,
|
||||
`c:\notexist:d:`: `bind mount source path does not exist: c:\notexist`,
|
||||
`c:\windows\system32\ntdll.dll:d:`: `source path must be a directory`,
|
||||
`name<:d:`: `invalid volume specification`,
|
||||
`name>:d:`: `invalid volume specification`,
|
||||
|
@ -189,7 +189,7 @@ func TestParseMountRaw(t *testing.T) {
|
|||
`c:\:/foo:xyzzy`: "invalid volume specification: ",
|
||||
`/`: "destination can't be '/'",
|
||||
`/..`: "destination can't be '/'",
|
||||
`c:\notexist:/foo`: `source path does not exist`,
|
||||
`c:\notexist:/foo`: `bind mount source path does not exist: c:\notexist`,
|
||||
`c:\windows\system32\ntdll.dll:/foo`: `source path must be a directory`,
|
||||
`name<:/foo`: `invalid volume specification`,
|
||||
`name>:/foo`: `invalid volume specification`,
|
||||
|
|
|
@ -252,7 +252,7 @@ func (p *windowsParser) validateMountConfigReg(mnt *mount.Mount, destRegex strin
|
|||
return &errMountConfig{mnt, err}
|
||||
}
|
||||
if !exists {
|
||||
return &errMountConfig{mnt, errBindNotExist}
|
||||
return &errMountConfig{mnt, errBindSourceDoesNotExist(mnt.Source)}
|
||||
}
|
||||
if !isdir {
|
||||
return &errMountConfig{mnt, fmt.Errorf("source path must be a directory")}
|
||||
|
|
Loading…
Reference in a new issue