From 0df9c0adf6bb738060a44a993cdf72c660fc1ece Mon Sep 17 00:00:00 2001 From: Claudiu Belu Date: Wed, 4 Apr 2018 05:20:05 -0700 Subject: [PATCH] tests: Checks for Windows permissions as well Some mounttest related tests are checking the file permissions set on the container files, but the default file permissions on Windows is 775 instead of 644, causing some tests to fail. Keep in mind that file permissions work differently on Windows, and setting file permissions via Kubernetes is not currently supported on Windows. --- test/e2e/common/configmap_volume.go | 19 ++++++------------- test/e2e/common/projected_configmap.go | 19 ++++++------------- test/e2e/common/projected_secret.go | 24 +++++++++--------------- test/e2e/common/secrets_volume.go | 24 +++++++++--------------- test/e2e/framework/util.go | 21 +++++++++++++++++++++ 5 files changed, 51 insertions(+), 56 deletions(-) diff --git a/test/e2e/common/configmap_volume.go b/test/e2e/common/configmap_volume.go index 32e42a2316..6e71ef3351 100644 --- a/test/e2e/common/configmap_volume.go +++ b/test/e2e/common/configmap_volume.go @@ -18,7 +18,6 @@ package common import ( "fmt" - "os" "path" . "github.com/onsi/ginkgo" @@ -622,17 +621,14 @@ func doConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64, d if defaultMode != nil { pod.Spec.Volumes[0].VolumeSource.ConfigMap.DefaultMode = defaultMode - } else { - mode := int32(0644) - defaultMode = &mode } - modeString := fmt.Sprintf("%v", os.FileMode(*defaultMode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/configmap-volume/data-1", defaultMode) output := []string{ "content of file \"/etc/configmap-volume/data-1\": value-1", - "mode of file \"/etc/configmap-volume/data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume configMaps", pod, 0, output) + f.TestContainerOutputRegexp("consume configMaps", pod, 0, output) } func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, itemMode *int32) { @@ -708,9 +704,6 @@ func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, item if itemMode != nil { pod.Spec.Volumes[0].VolumeSource.ConfigMap.Items[0].Mode = itemMode - } else { - mode := int32(0644) - itemMode = &mode } // Just check file mode if fsGroup is not set. If fsGroup is set, the @@ -719,8 +712,8 @@ func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, item "content of file \"/etc/configmap-volume/path/to/data-2\": value-2", } if fsGroup == 0 { - modeString := fmt.Sprintf("%v", os.FileMode(*itemMode)) - output = append(output, "mode of file \"/etc/configmap-volume/path/to/data-2\": "+modeString) + fileModeRegexp := framework.GetFileModeRegex("/etc/configmap-volume/path/to/data-2", itemMode) + output = append(output, fileModeRegexp) } - f.TestContainerOutput("consume configMaps", pod, 0, output) + f.TestContainerOutputRegexp("consume configMaps", pod, 0, output) } diff --git a/test/e2e/common/projected_configmap.go b/test/e2e/common/projected_configmap.go index 5a8fda2296..6339322a7b 100644 --- a/test/e2e/common/projected_configmap.go +++ b/test/e2e/common/projected_configmap.go @@ -18,7 +18,6 @@ package common import ( "fmt" - "os" "path" "k8s.io/api/core/v1" @@ -554,17 +553,14 @@ func doProjectedConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup if defaultMode != nil { //pod.Spec.Volumes[0].VolumeSource.Projected.Sources[0].ConfigMap.DefaultMode = defaultMode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = defaultMode - } else { - mode := int32(0644) - defaultMode = &mode } - modeString := fmt.Sprintf("%v", os.FileMode(*defaultMode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/projected-configmap-volume/data-1", defaultMode) output := []string{ "content of file \"/etc/projected-configmap-volume/data-1\": value-1", - "mode of file \"/etc/projected-configmap-volume/data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume configMaps", pod, 0, output) + f.TestContainerOutputRegexp("consume configMaps", pod, 0, output) } func doProjectedConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, itemMode *int32) { @@ -645,9 +641,6 @@ func doProjectedConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup in if itemMode != nil { //pod.Spec.Volumes[0].VolumeSource.ConfigMap.Items[0].Mode = itemMode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = itemMode - } else { - mode := int32(0644) - itemMode = &mode } // Just check file mode if fsGroup is not set. If fsGroup is set, the @@ -656,8 +649,8 @@ func doProjectedConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup in "content of file \"/etc/projected-configmap-volume/path/to/data-2\": value-2", } if fsGroup == 0 { - modeString := fmt.Sprintf("%v", os.FileMode(*itemMode)) - output = append(output, "mode of file \"/etc/projected-configmap-volume/path/to/data-2\": "+modeString) + fileModeRegexp := framework.GetFileModeRegex("/etc/projected-configmap-volume/path/to/data-2", itemMode) + output = append(output, fileModeRegexp) } - f.TestContainerOutput("consume configMaps", pod, 0, output) + f.TestContainerOutputRegexp("consume configMaps", pod, 0, output) } diff --git a/test/e2e/common/projected_secret.go b/test/e2e/common/projected_secret.go index 9b0bb49ec8..09cee17c93 100644 --- a/test/e2e/common/projected_secret.go +++ b/test/e2e/common/projected_secret.go @@ -18,7 +18,6 @@ package common import ( "fmt" - "os" "path" "k8s.io/api/core/v1" @@ -193,9 +192,10 @@ var _ = Describe("[sig-storage] Projected secret", func() { }, } - f.TestContainerOutput("consume secrets", pod, 0, []string{ + fileModeRegexp := framework.GetFileModeRegex("/etc/projected-secret-volume/data-1", nil) + f.TestContainerOutputRegexp("consume secrets", pod, 0, []string{ "content of file \"/etc/projected-secret-volume/data-1\": value-1", - "mode of file \"/etc/projected-secret-volume/data-1\": -rw-r--r--", + fileModeRegexp, }) }) @@ -461,9 +461,6 @@ func doProjectedSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int if defaultMode != nil { //pod.Spec.Volumes[0].VolumeSource.Projected.Sources[0].Secret.DefaultMode = defaultMode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = defaultMode - } else { - mode := int32(0644) - defaultMode = &mode } if fsGroup != nil || uid != nil { @@ -473,13 +470,13 @@ func doProjectedSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int } } - modeString := fmt.Sprintf("%v", os.FileMode(*defaultMode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/projected-secret-volume/data-1", defaultMode) expectedOutput := []string{ "content of file \"/etc/projected-secret-volume/data-1\": value-1", - "mode of file \"/etc/projected-secret-volume/data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume secrets", pod, 0, expectedOutput) + f.TestContainerOutputRegexp("consume secrets", pod, 0, expectedOutput) } func doProjectedSecretE2EWithMapping(f *framework.Framework, mode *int32) { @@ -547,16 +544,13 @@ func doProjectedSecretE2EWithMapping(f *framework.Framework, mode *int32) { if mode != nil { //pod.Spec.Volumes[0].VolumeSource.Projected.Sources[0].Secret.Items[0].Mode = mode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = mode - } else { - defaultItemMode := int32(0644) - mode = &defaultItemMode } - modeString := fmt.Sprintf("%v", os.FileMode(*mode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/projected-secret-volume/new-path-data-1", mode) expectedOutput := []string{ "content of file \"/etc/projected-secret-volume/new-path-data-1\": value-1", - "mode of file \"/etc/projected-secret-volume/new-path-data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume secrets", pod, 0, expectedOutput) + f.TestContainerOutputRegexp("consume secrets", pod, 0, expectedOutput) } diff --git a/test/e2e/common/secrets_volume.go b/test/e2e/common/secrets_volume.go index 432cd21afd..75f3319d73 100644 --- a/test/e2e/common/secrets_volume.go +++ b/test/e2e/common/secrets_volume.go @@ -18,7 +18,6 @@ package common import ( "fmt" - "os" "path" "k8s.io/api/core/v1" @@ -182,9 +181,10 @@ var _ = Describe("[sig-storage] Secrets", func() { }, } - f.TestContainerOutput("consume secrets", pod, 0, []string{ + fileModeRegexp := framework.GetFileModeRegex("/etc/secret-volume/data-1", nil) + f.TestContainerOutputRegexp("consume secrets", pod, 0, []string{ "content of file \"/etc/secret-volume/data-1\": value-1", - "mode of file \"/etc/secret-volume/data-1\": -rw-r--r--", + fileModeRegexp, }) }) @@ -431,9 +431,6 @@ func doSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, secre if defaultMode != nil { pod.Spec.Volumes[0].VolumeSource.Secret.DefaultMode = defaultMode - } else { - mode := int32(0644) - defaultMode = &mode } if fsGroup != nil || uid != nil { @@ -443,13 +440,13 @@ func doSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, secre } } - modeString := fmt.Sprintf("%v", os.FileMode(*defaultMode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/secret-volume/data-1", defaultMode) expectedOutput := []string{ "content of file \"/etc/secret-volume/data-1\": value-1", - "mode of file \"/etc/secret-volume/data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume secrets", pod, 0, expectedOutput) + f.TestContainerOutputRegexp("consume secrets", pod, 0, expectedOutput) } func doSecretE2EWithMapping(f *framework.Framework, mode *int32) { @@ -508,16 +505,13 @@ func doSecretE2EWithMapping(f *framework.Framework, mode *int32) { if mode != nil { pod.Spec.Volumes[0].VolumeSource.Secret.Items[0].Mode = mode - } else { - defaultItemMode := int32(0644) - mode = &defaultItemMode } - modeString := fmt.Sprintf("%v", os.FileMode(*mode)) + fileModeRegexp := framework.GetFileModeRegex("/etc/secret-volume/new-path-data-1", mode) expectedOutput := []string{ "content of file \"/etc/secret-volume/new-path-data-1\": value-1", - "mode of file \"/etc/secret-volume/new-path-data-1\": " + modeString, + fileModeRegexp, } - f.TestContainerOutput("consume secrets", pod, 0, expectedOutput) + f.TestContainerOutputRegexp("consume secrets", pod, 0, expectedOutput) } diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index a6e3aa207e..aeed6fa413 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -5252,3 +5252,24 @@ func WaitForNodeHasTaintOrNot(c clientset.Interface, nodeName string, taint *v1. } return nil } + +// GetFileModeRegex returns a file mode related regex which should be matched by the mounttest pods' output. +// If the given mask is nil, then the regex will contain the default OS file modes, which are 0644 for Linux and 0775 for Windows. +func GetFileModeRegex(filePath string, mask *int32) string { + var ( + linuxMask int32 + windowsMask int32 + ) + if mask == nil { + linuxMask = int32(0644) + windowsMask = int32(0775) + } else { + linuxMask = *mask + windowsMask = *mask + } + + linuxOutput := fmt.Sprintf("mode of file \"%s\": %v", filePath, os.FileMode(linuxMask)) + windowsOutput := fmt.Sprintf("mode of Windows file \"%v\": %s", filePath, os.FileMode(windowsMask)) + + return fmt.Sprintf("(%s|%s)", linuxOutput, windowsOutput) +}