Skip to content

Commit

Permalink
added check for empty source in bind mount
Browse files Browse the repository at this point in the history
Signed-off-by: Ethan Haynes <ethanhaynes@alumni.harvard.edu>

fixed error by removing punctuation

Signed-off-by: Ethan Haynes <ethanhaynes@alumni.harvard.edu>
  • Loading branch information
Ethan Haynes committed Jan 21, 2018
1 parent da86425 commit a4f863b
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
11 changes: 9 additions & 2 deletions cli/compose/loader/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,9 @@ func LoadService(name string, serviceDict map[string]interface{}, workingDir str
return nil, err
}

resolveVolumePaths(serviceConfig.Volumes, workingDir, lookupEnv)
if err := resolveVolumePaths(serviceConfig.Volumes, workingDir, lookupEnv); err != nil {
return nil, err
}
return serviceConfig, nil
}

Expand Down Expand Up @@ -376,12 +378,16 @@ func resolveEnvironment(serviceConfig *types.ServiceConfig, workingDir string, l
return nil
}

func resolveVolumePaths(volumes []types.ServiceVolumeConfig, workingDir string, lookupEnv template.Mapping) {
func resolveVolumePaths(volumes []types.ServiceVolumeConfig, workingDir string, lookupEnv template.Mapping) error {
for i, volume := range volumes {
if volume.Type != "bind" {
continue
}

if volume.Source == "" {
return errors.New("invalid mount config for type \"bind\": field Source must not be empty.")
}

filePath := expandUser(volume.Source, lookupEnv)
// Check for a Unix absolute path first, to handle a Windows client
// with a Unix daemon. This handles a Windows client connecting to a
Expand All @@ -394,6 +400,7 @@ func resolveVolumePaths(volumes []types.ServiceVolumeConfig, workingDir string,
volume.Source = filePath
volumes[i] = volume
}
return nil
}

// TODO: make this more robust
Expand Down
41 changes: 41 additions & 0 deletions cli/compose/loader/loader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1266,6 +1266,47 @@ services:
assert.Contains(t, err.Error(), "services.tmpfs.volumes.0 Additional property tmpfs is not allowed")
}

func TestLoadBindMountSourceMustNotBeEmpty(t *testing.T) {
_, err := loadYAML(`
version: "3.5"
services:
tmpfs:
image: nginx:latest
volumes:
- type: bind
target: /app
`)
require.Error(t, err)
assert.Contains(t, err.Error(), "invalid mount config for type \"bind\": field Source must not be empty")
}

func TestLoadBindMountWithSource(t *testing.T) {
config, err := loadYAML(`
version: "3.5"
services:
bind:
image: nginx:latest
volumes:
- type: bind
target: /app
source: "."
`)
require.NoError(t, err)

workingDir, err := os.Getwd()
require.NoError(t, err)

expected := types.ServiceVolumeConfig{
Type: "bind",
Source: workingDir,
Target: "/app",
}

require.Len(t, config.Services, 1)
assert.Len(t, config.Services[0].Volumes, 1)
assert.Equal(t, expected, config.Services[0].Volumes[0])
}

func TestLoadTmpfsVolumeSizeCanBeZero(t *testing.T) {
config, err := loadYAML(`
version: "3.6"
Expand Down

0 comments on commit a4f863b

Please sign in to comment.