passthrough readOnly to subpath
This commit is contained in:
@@ -1009,6 +1009,7 @@ func getTestPaths(base string) (string, string) {
|
||||
|
||||
func TestBindSubPath(t *testing.T) {
|
||||
defaultPerm := os.FileMode(0750)
|
||||
readOnlyPerm := os.FileMode(0444)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
@@ -1016,6 +1017,7 @@ func TestBindSubPath(t *testing.T) {
|
||||
// base.
|
||||
prepare func(base string) ([]string, string, string, error)
|
||||
expectError bool
|
||||
readOnly bool
|
||||
}{
|
||||
{
|
||||
name: "subpath-dir",
|
||||
@@ -1220,6 +1222,55 @@ func TestBindSubPath(t *testing.T) {
|
||||
},
|
||||
expectError: false,
|
||||
},
|
||||
{
|
||||
name: "subpath-dir-readonly",
|
||||
prepare: func(base string) ([]string, string, string, error) {
|
||||
volpath, _ := getTestPaths(base)
|
||||
subpath := filepath.Join(volpath, "dir0")
|
||||
return nil, volpath, subpath, os.MkdirAll(subpath, defaultPerm)
|
||||
},
|
||||
expectError: false,
|
||||
readOnly: true,
|
||||
},
|
||||
{
|
||||
name: "subpath-file-readonly",
|
||||
prepare: func(base string) ([]string, string, string, error) {
|
||||
volpath, _ := getTestPaths(base)
|
||||
subpath := filepath.Join(volpath, "file0")
|
||||
if err := os.MkdirAll(volpath, defaultPerm); err != nil {
|
||||
return nil, "", "", err
|
||||
}
|
||||
return nil, volpath, subpath, ioutil.WriteFile(subpath, []byte{}, defaultPerm)
|
||||
},
|
||||
expectError: false,
|
||||
readOnly: true,
|
||||
},
|
||||
{
|
||||
name: "subpath-dir-and-volume-readonly",
|
||||
prepare: func(base string) ([]string, string, string, error) {
|
||||
volpath, _ := getTestPaths(base)
|
||||
subpath := filepath.Join(volpath, "dir0")
|
||||
if err := os.MkdirAll(subpath, defaultPerm); err != nil {
|
||||
return nil, "", "", err
|
||||
}
|
||||
return nil, volpath, subpath, os.Chmod(subpath, readOnlyPerm)
|
||||
},
|
||||
expectError: false,
|
||||
readOnly: true,
|
||||
},
|
||||
{
|
||||
name: "subpath-file-and-vol-readonly",
|
||||
prepare: func(base string) ([]string, string, string, error) {
|
||||
volpath, _ := getTestPaths(base)
|
||||
subpath := filepath.Join(volpath, "file0")
|
||||
if err := os.MkdirAll(volpath, defaultPerm); err != nil {
|
||||
return nil, "", "", err
|
||||
}
|
||||
return nil, volpath, subpath, ioutil.WriteFile(subpath, []byte{}, readOnlyPerm)
|
||||
},
|
||||
expectError: false,
|
||||
readOnly: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
@@ -1244,6 +1295,7 @@ func TestBindSubPath(t *testing.T) {
|
||||
VolumePath: volPath,
|
||||
PodDir: filepath.Join(base, "pod0"),
|
||||
ContainerName: testContainer,
|
||||
ReadOnly: test.readOnly,
|
||||
}
|
||||
|
||||
_, subpathMount := getTestPaths(base)
|
||||
@@ -1269,12 +1321,39 @@ func TestBindSubPath(t *testing.T) {
|
||||
if err = validateFileExists(subpathMount); err != nil {
|
||||
t.Errorf("test %q failed: %v", test.name, err)
|
||||
}
|
||||
if err = validateReadOnlyMount(test.readOnly, bindPathTarget, fm); err != nil {
|
||||
t.Errorf("test %q failed: %v", test.name, err)
|
||||
}
|
||||
}
|
||||
|
||||
os.RemoveAll(base)
|
||||
}
|
||||
}
|
||||
|
||||
func validateReadOnlyMount(expectedReadOnly bool, bindPathTarget string, mounter *FakeMounter) error {
|
||||
mps, err := mounter.List()
|
||||
if err != nil {
|
||||
return fmt.Errorf("fakeMounter.List() returned error: %v", err)
|
||||
}
|
||||
for _, mp := range mps {
|
||||
if mp.Path == bindPathTarget {
|
||||
foundReadOnly := false
|
||||
for _, opts := range mp.Opts {
|
||||
if opts == "ro" {
|
||||
foundReadOnly = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if expectedReadOnly != foundReadOnly {
|
||||
return fmt.Errorf("expected readOnly %v, got %v for mount point %v", expectedReadOnly, foundReadOnly, bindPathTarget)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("failed to find mountPoint %v", bindPathTarget)
|
||||
}
|
||||
|
||||
func TestParseMountInfo(t *testing.T) {
|
||||
info :=
|
||||
`62 0 253:0 / / rw,relatime shared:1 - ext4 /dev/mapper/ssd-root rw,seclabel,data=ordered
|
||||
|
Reference in New Issue
Block a user